• ベストアンサー

計算速度の速いC言語を教えてください!

C++、C++/CLI、C#のどれかを初めて勉強しようと思っているのですが、どの言語を学んだらよいでしょうか? 主にやりたいことは、スプレッドシート上での計算を数千万回繰り返す計算とグラフ描写です。 これまでVBAを使って為替相場の価格変動をシミュレートするプログラムを組んで、4万行の計算x300回程度の計算をずっとしてきました。ただ、EXCELのグラフ機能に不満なので、計算とグラフ描写もするソフトを自分で作ろうと思っています。VBAは基本的な構文(For,If, Whileなど)を理解して使っています。プログラミングはVBA以外に触れたことがないのですが、永くコンピュータと付き合いたいのでC言語を新しく勉強したいと思ってます。 そこで教えて頂きたいのですが、C++、C++/CLI、C#のどれを勉強するのがよいでしょうか?上記のような計算をした時に速度に大きな違いが出るのでしたら速い言語を勉強したいです。 あまり違いが出ないのでしたら、上記のような目的のソフトをWindows上で趣味として作り、末永く付き合える言語を教えてください。 ちなみに上記のような計算で、VBAでは10時間程度かかります。 質問が長くなってしまってすいません。C言語をご存知の方、ご教授くださいm(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#1さんのおっしゃるように、スピードを求めるなら普通のC言語で計算させるのが(現実的には)いちばんです。C言語とC++とでは、場合によっては100倍以上の速度の違いが出ることもあります。ただしこれは最悪の場合であって、普通に使う限りはほとんど変わらないと考えてください。 C#やC++/CLIと言った .NET 系の言語は、ネイティブ環境(≒C言語やC++)と比較して実質80~90%程度の速度が出るそうです。 が、そもそもVBAだから十時間もかかるのであって、C言語でもC++でもC#でも、恐らくその1000分の1の時間で計算できてしまうでしょう。 このあたりの言語を使うなら、スピードは実質的に変わりません。 さて、グラフ描写をしたいということですので、私がおすすめする環境は二種類あります。 ・C言語など + gnuplot C言語などで計算して、gnuplotでグラフを描画させます。 gnuplotはグラフを描くための専用のGNUツールです。Excelなんかと比較すれば取っつきにくいですが、普通に描きたいグラフならまず描けるだけの幅広さを持っています。誤差やベクトル図なんかも描けますし、 discourageするようですが、グラフツールを自作する必要は恐らくありません。gnuplotがあれば十分のはずです。 http://t16web.lanl.gov/Kawano/gnuplot/intro/style.html candlesticksの項なんかは特に株関係で使えそうですね。 ・R(あーる) 統計処理用の言語(処理系)であるRです。Rの一文字だけで検索できるほど使われている言語です。 http://aoki2.si.gunma-u.ac.jp/R/ こちらは計算もグラフ描きも一つの言語で出来るところが魅力です。おまけにライブラリも豊富なので、使いたいと思う計算アルゴリズムも大抵があらかじめ用意されています。レーダーチャートなども描けてしまいます。 最後に、永くつきあえるものという話ですが、言語は変わっていくものなのであまりそういう期待は出来ません。 それでも敢えて言うなら、Pythonですね。 .NET 上でも IronPython が動きますし、他のOSに移ってもおおよそそのまま使えます。速度もせいぜいCやC++の10倍程度ですし、低レイヤも扱えるなどスクリプト言語として優れています。 .NET を知りたいなら C# がいちばん良いと思いますが、どこまでWindows天下か分かりませんから、永く付き合うとなると必ずしもおすすめできません。 教養としてならC言語はやっておいて損のない言語ですが、じっさいに計算などさせる目的ならPerlやRubyやPython、Rなどの方が圧倒的に扱いやすいです。

yama3007
質問者

補足

beefisdead様 ご回答ありがとうございます。 それほどまでにVBAが遅いとは知りませんでした!今までVBAでやっていた自分はまるで北京原人です。 >C言語でもC++でもC#でも、恐らくその1000分の1の時間で計算できてしまうでしょう。 それだけVBAと差が出せるのであれば、計算速度の問題はクリアできそうです。まず基礎はとりあえずCで勉強しようと思います。 gnuplot,Rどちらも非常に良いツールですね。もっと自分で深く調べてみようと思います。 為替の取引会社に接続し、価格データを取り込んでリアルタイムでチャートに反映させることを将来的にやりたいとおもってます。gnuplot,R等を利用してできるかどうか、自分でも調べてみたいと思います。もしアドバイス等ありましたら教えていただけないでしょうか。

その他の回答 (5)

回答No.6

いきなり、C言語からやってはたいへんでは。 とりあえず、VBやC#などから初めて、 最短で質問のプログラムを作ってしまう。 そうすると、そのVBAの計算時間分があくので、 (少なくとも、VBAより格段にはやい) VBやC#で作ったものをC++やC言語等に移行していく。 でも、今からCやC++を始めるのであれば、 言語としての勉強の範囲内でよいかと。 やり始めると、いろいろ問題も出てきます。 CやC++に、C#やVBなどのdecimalなんて便利な物もないし、 そうなると小数の端数に誤差も生じてくるので 自前で補正したりせねばならなくなったり。

yama3007
質問者

補足

iyaiyaview様 ご回答ありがとうございます。 >でも、今からCやC++を始めるのであれば、言語としての勉強の範囲内でよいかと。 C++があまりオススメでない理由としては、やはり開発効率でしょうか?

回答No.5

ANo.3です。 あれこれ書くと、うんざりすると思うのですが。。。 今からCをやるのは、あまり意味がありません。 はっきり言って、時間の浪費です。 C++でスタートしていいと思います。 これは、経験者10人のうち、9人は同じことをいうでしょう。 具体的には、VC++が入りやすいと思います。 参考書が多く、関連サイトもふんだんにあります。 問題はSDKをやるかMFCをやるかです。 VC++ExpressEditionなら、マイクロソフトのサイトから無料でダウンロードできますが、MFCがついていないので、SDKになります。 過半数の人は、SDKのほうがいいと言うでしょう。 ただ、相当に難しく、根性が必要です。 MFCとSDKで、できることは同じです。 というより、MFCにしろSDKにしろ、できないことはありません。 (と、豪語しておきます) CLIをやるのなら、C#か、VBでやるのが正確です。 VC++だと、C++でVBをやるような感じで、とってもヘンです。 ちなみに処理速度は、CLIがMFCやSDKの2~3割落ちです。 前の方が書かれている、Javaについては、私にはなんとも言えません。 日の出のjava、没落のC++みたいな部分はあります。 Javaで大抵のことは用が足りてしまうのも事実です。 ただ、為替に関して高度な計算をやろうとすると、C++のほうがいいかもしれません。

yama3007
質問者

補足

turukame2005様 度々アドバイスありがとうございます。 #3でのアドバイス頂いて、C++/CLIは候補から外すことにしました。 準備として1~2冊Cの入門書を読んで、C++かC#をやろうと思います。もしC++ならSDKをやろうと思います。

  • LunaSun
  • ベストアンサー率30% (4/13)
回答No.4

C言語を勉強することを止めはしませんが。自分としては、平行して現プログラムの最適化を行うことをお勧めします。アルゴリズムの最適化は、どの言語にも有効です。たとえプログラムなどがそのまま利用できなくても、最適化の考え方が身につくと百人力です。 現行のプログラムを見てはいないので必ずとはいえませんが、VBAでも現行の物を早く実行できる可能性があります。後、移植での注意すべき点としては、現行プログラム中にExcel標準の関数(特に財務系など)を利用している場合、それらも最悪自分でプログラムする必要が出てきます。 とりあえず、処理速度アップのテクニックなど。もしすでにやられていたらすみません。 Excel VBAでワークシートや、セルへのアクセスは実行コストが高いということは知っていますか? --------------------------------- 高コスト セル(Rangeオブジェクト) ---------越えられない壁-----------      Variant型変数 低コスト Long,Integer型変数 ---------------------------------- なので、セルの中の値を一度、変数に読み込み計算後、結果のみをセルに書き込むようにすると若干、早くなります。また、セルへの書き込み中は、対象シートを非表示にすること。 セルから変数に読み込む場合、一度、セルの内容をVariant型の変数に2次配列として読み込んでから、ほかのLong、Integerなどの型の変数に設定すれば、大変、早くなります。 可変長配列は利用しない。Collectionオブジェクトを利用する。 クラスモジュールを利用する。 など、以上の物を利用することがプログラムをの効率を上げる方法です。 ちなみに、自分としては、C/C++よりも、Javaを推薦します。Javaでかき直しても、十分スピードが出るでしょう。イメージの作成も楽だし。C/C++ではイメージ作成は標準ではない、プラットフォーム(OS)依存となるので。

yama3007
質問者

補足

LunaSun様 ご回答ありがとうございます。 具体的な方法ありがとうございます。いくつかは実行していたのですが、クラスモジュールはまだ使ったことがありませんでした。 Javaは広く使われているみたいですけど、新しくJavaを始めるならC#の方が得だと思っていました。

回答No.3

CとC++の違いはご存じですか。 処理速度を重視するなら、CかC++ですが、今どきCなどはやりませんから、C++ということになります。 もともとCが高速処理のための言語ですから、VBAなどは比較になりません。 正確に言うと、一般的なのは、マイクロソフトのVisualC++を買って、その中の、SDKかMFCをやることです。 殆どの人は、SDKを薦めるでしょうが、相当に難しく、覚悟が必要です。 挫折しては、元も子もないので、私はMFCのほうがいいと思います。 それでも、VBAよりはるかに難解です。 もちろん、MFCの基本を理解していれば、SDKも入りやすいです。 C++/CLIは感心しません。 ちょっと気の利いたことをやろうとすると、その都度ネイティブコードの出番になって、うんざりします。 なんのためのマネージコードか、さっぱり分かりません。 マイクロソフトはC++/CLIに誘導したいようですが、世の中はマイクロソフトのために成り立っている訳ではありません。 権力ボケしたのではないかと思います。 あと、処理速度は、言語だけでなく、PCのクロックにもよります。

yama3007
質問者

補足

turukame2005様 ご回答ありがとうございます。 C++/CLIは下の記事読んでかなり気持ちが傾いてたんですけど、そういう短所があったんですか。勉強不足でした。 http://www.atmarkit.co.jp/fdotnet/special/cppcli/cppcli_01.html PCの環境はXP,Pentium4,1.8gHz,512Mbです。 みなさんのご意見参考にして、まずはCの入門を勉強してそれからC++に移行しようと思います。開発環境はTurboC++かVC++ExpressEditionがいいと思うのですが、ごく初期の入門者が使うにはどちらが良いと思いますか? ご存知でしたらご意見をお聞かせください。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

> C++、C++/CLI、C# まず、これらはいずれもC言語ではありません。 計算速度の速さを求めるのであれば、普通のC言語にするのが一番です。 C++でも熟練すれば同等以上のパフォーマンスを引き出すことができますが、不慣れな状態ではあまり高速なプログラムは書けないかもしれません。いずれにせよ、効率重視のプログラミングを目指すなら、C++を使う場合でもC言語から入る方がよいでしょう。 > ちなみに上記のような計算で、VBAでは10時間程度かかります。 最初、プログラミングに10時間かと思ったのですが、実行に10時間ということですね。それなら、C言語で実装すれば桁違いに速くなると思います。 ただし、C言語で扱いやすいように、ExcelのデータはCSVかタブ区切りにでも変換しておいた方がよいでしょう。 グラフ表示は何ともいえませんが、自分で実装するにはそれなりに手間ですので、覚悟してください。

yama3007
質問者

補足

jacta様 ご回答ありがとうございます。 はい、仰るとうり1setの実行に10時間程度です。本当はもっと回数を増やしたいのですが、実行時間が長すぎるためその程度に抑えてます。 C言語ですか。C++, C++/CLI, C# を考えていたのですが、やはりCから入るのが急がば回れ的でしょうかね。Cで基礎を積んでみようと思います。

関連するQ&A

  • 言語別(C/C++,Java等)の計算速度の違いが知りたいです。

    言語別(C/C++,Java等)の計算速度の違いが知りたいです。 巡回セールスマン問題を解く(よさそうな解を見つける)プログラムを書くことになったのですが、言語が自由です。 オブジェクト指向言語で組もうと思っているんですが、C++、C#、Javaなどの言語のうち、計算速度が早いのはどれでしょうか? 順番も分かれば、教えてほしいです。 また、もしC言語で組めれば、やっぱりオブジェクト指向言語よりも早いのでしょうか? 大体でもよいので、分かる方いたら教えてください。 よろしくお願いします。

  • C言語について

    コンピューターシミュレーション(数値計算)をするためにC言語を勉強することになりました。以前まではFORTRANで行っていたので、まったくC言語がわかりません。C言語の勉強を始めるにあたって、何か良い参考書または、ホームページとかあれば教えてください。

  • C言語を勉強したいです。

    C言語どころか、プログラミングを触った程度でしか 勉強したことがないのですが、本格的に勉強したいと思っています。 でも、勉強をし始めたのはいいのですが、実際のC言語の ソフトを持ってないのですが、そのソフトは、どうやって手に入れれば いいんでしょうか。タダでダウンロードできる・・なんてことは できないんでしょうか?簡単な質問かもしれませんが、もしよければ 教えてください。よろしくお願いします。

  • プログラム言語に上下関係ってありますか?

    プログラム言語に上下関係ってありますか? 私は、普段プログラミングするとき、表計算ソフトとの連携が容易であり、 グラフ化が簡単にできると理由から、Excelに付属のるVBAを使います。 しかしながら、私の中ではVBAはExcelに毛が生えた程度で、 極めて初心者用のプログラムだと思っています。 やはりC言語やMathematicaの方がプロ仕様という感じがして、 レベルが上のように思います。 そのため、他人にそのプログラムは何で書きましたか? 聞かれたときに、「VBAです」と答えるのですが、「何だVBAか」と思われていないかと 少し引けを感じてしまいます。 でも、実際、どうなんでしょうか? 勝手に私の中でVBAよりC言語やMathematicaの方が偉いと思っているだけなのでしょうか? それとも実際に、ほとんど人が同じように思っているのでしょうか?

  • RubyとC#について

    現在、研究のためエクセルVBAで数十万~数百万個程度のデータの集計及び分析をしています。 VBAでは時間がかなりかかってしまうことと、グラフの描画能力が低いため、新たなプログラミング言語を勉強しようと考えています。 いろいろ情報を収集した結果、RubyかC#にしようかと思っております。 あまり複雑なプログラミング能力は必要ないため、比較的導入しやすそうなRubyにしようかと考えていますが、グラフの描画能力と将来性を考えればC#の方がいいのではないかと迷っております。 やりたい事は、データの集計分析とある程度の柔軟性のあるグラフの描画です。 どちらの言語が適しているのか是非ご教授ください。 よろしくお願いいたします。

  • visual studioのC言語とフリーソフトのC言語ツールの違い

    前にvisual studioでC言語の勉強を行っており、再び始めようかと思っているものです。 少し疑問に思ったのですが、visual studioのC言語とC言語のフリーソフトの違いは何でしょうか?

  • C言語について教えてください。

    C言語について教えてください。 C言語ソフト「C言語をはじめよう」で、sin,cos,tanを求めたり、計算(sin=cos*tanや、sin^2(sinの二乗)+cos^2(cosの二乗)=1や、cos=sin/tan,tan=sin/cos)するプログラムを作りたくて、ネットを見たのですが、全然意味がわかりません。 また、√(平方根)の表示や、計算する(1/√3^2(√3分の1の二乗)*√3見たいな計算)プログラムを作りたいと思いますが、こちらも同様です。 #include<stdio.h> #include<math.h> int main(void) ここまではわかりますが、ここから先がわかりません。 どなたか。詳しくわかりやすく、入力例などをよろしくお願いします。 また、上記のプログラムや、書き方が違いましたら、こちらもご指摘お願いします。 なるべく早く、ご解答ください。

  • VBAでC言語

    本日登録しました。よろしくお願いします。 質問ですが、エクセルVBAでいろいろ始めたのですが この中でC言語は利用できるのでしょうか。 計算をする事に使用したいのです。 勤怠管理で50人ほどの給与計算などを作ったのですが、 皆勤賞・精勤賞なども自動でやるので、関数も多様しています。 このためか、どうも動作がぎこち無いです。 C言語とかは計算が早いという事を聞いたので、 使うことが出来ないかと考えました。

  • C言語を始めるには?

    私はC言語に関して全くの初心者です。 これからC言語の勉強を始めたいのですが、 全くの初心者でもわかるようなサイトがあれば 教えて下さい。 お勧めのソフトなどがあれば教えて下さい。 まず何から手をつけたら良いのでしょうか? どうにかして理解したいのです。 回答お願いします。

  • C言語をはじめるにあたって

    今から初めてみようと思っています。 C言語をするにあたって記述ソフトとコンパイルソフトが必要みたいなのですが どのソフトを使用したらいいのかわかりません。 ダウンロードしても使用方法がわかりませんでした。 初心者で勉強程度ができるソフトを紹介していただきたいです。 使用しているOSはWindows7の64bitです。 よろしくお願いします。