Visual C++(2005)付属のコマンドラインのコンパイラを使って(cl)コンパイルしたプログラムでは、出力したい値を格納するdouble型の変数の値が、-1.#IND00となってしまうのに対して、
まったく同じソースをgccでコンパイルした場合には、普通の数値が正常に出力され、その値は事前の予想どおりの傾向を持っていることから、まちがってはいないようです。
clではうまくいかず、gccではうまくいくのはなぜなのでしょうか。
関係があるかどうかわかりませんが、値の算出の過程でrand()を使っています。
No.5ベストアンサー
- 回答日時:
浮動小数点は誤差がつき物ですよね
#INDは不定のときに表示されるようなので誤差が重なって0.0 / 0.0 みたいな値になったのでしょう
ソースがないのではっきりはわかりませんが。
この回答への補足
rand()を使用したのは、ボックス・ミューラー法を用いるためで、
r1=(double)rand()/RAND_MAX;
r2=(double)rand()/RAND_MAX;
で、
"sqrt(-2*log(r1)) * cos(2*Pi*r2)"に続くのですが、ここでdouble型の範囲をこえてしまっていたようです。
0/0がどこかで生じていないかソースを確認しながら、再度ボックス・ミューラー法を調べる過程で見つけたページで理解しました。
(http://detail.chiebukuro.yahoo.co.jp/qa/question …)
gccでは工夫なしにうまくいく理由がわかりませんが、原因はわかりました。
No.3
- 回答日時:
何かしらバグがあるとしか言えません。
そもそもコンパイラが別物なので、たまたまうまくいっちゃったとか、言語仕様の観点からは間違ってないのにうまくいかないということも多々あります。
極端な例では、デフォルトで stdio.h をインクルードする仕様のコンパイラで学習をしていた子が、それに慣れたせいでVC++ではコンソールに文字列を表示することすらできなかったというケースがありました。
この回答への補足
変数のサイズをこえた値が出てきていたようです。あふれそうなときには、乱数を作り直す処理を加えれば、正常に値が求まりました。
gccではそのような工夫なしにうまくいっていたのが不思議なのですが、原因だけははっきりしました。
No.2
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 3つの倍精度浮動小数点値の平均を求めて、3つの引数全てを平均値に変更するメソッドを作成し、キーボード 1 2022/07/13 16:04
- C言語・C++・C# 3×3のラテン方陣をつくるプログラムを作成したのですが、(↓) #include <stdio.h> 5 2023/07/10 01:53
- Java Java モンスターブリーダー 1 2023/02/05 09:44
- Java Javaの問題なのですが、 永久ループを使って以下に従って数値を出力するプログラムを作成する。 ・1 3 2023/06/06 18:43
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語のマクローリン展開ローラン展開のコードについて 3 2022/12/15 14:45
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- Excel(エクセル) Excelで関数を使って入力した値を、関数を抜いた値として扱いたい 1 2022/07/08 02:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
C++ で、「)」が必要 というエ...
-
コンパイルできない
-
C言語
-
変数(関数)名の頭に_
-
コンパイラについて
-
ABAQUS ユーザーサブルーチン...
-
io.hをincludeしたプログラムで...
-
io.hをincludeするとそのような...
-
sprintfを用いたフォーマット文...
-
C言語のオススメ統合開発環境(...
-
PL/SQLで、区切りのスペースは...
-
C言語のワーニングメッセージの...
-
秀丸エディタでのC言語環境(ハ...
-
Eclipseの環境設定について
-
ブラウザ上でクライアント側で...
-
fortranでのNaNについて
-
コンパイラフラグ(compiler fla...
-
FORTRANとC++の連動について
-
Vba 実数および実数タイプの変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
C++ で、「)」が必要 というエ...
-
コンパイルできない
-
C++でアボート(Abort)で処理が...
-
変数(関数)名の頭に_
-
Visual C++とVisual C++.NETの違い
-
Eclipseの環境設定について
-
volatile修飾について
-
コンパイラについて
-
linuxのセキュリティ対策と致し...
-
__extension__
-
io.hをincludeするとそのような...
-
コンパイラフラグ(compiler fla...
-
PICマイコンによる乱数の表示に...
-
conio.h? curses.h?
-
【エラー】Cpadで初めてコンパイル
-
ABAQUS ユーザーサブルーチン...
-
関数の戻り値による変数の初期化
-
Delphiの逆コンパイル
-
プリコンパイラとは?
おすすめ情報