
以下のような技術的な計算式があります。
C=8.9×107[7:べき数]×S/(X-Xa)2[2:べき数]×exp(-35.1×(Y-Ya)2[2:べき数]/(X-Xa)2[2:べき数]))- 221.1×H2[2:べき数] /(X-Xa)2 [2:べき数]
使用変数などの値の大まかな範囲
C : 求める変数
X,Y,Xa,Ya:0~20000
S:0~500
H:10~200
この式をVISUAL BASIC FOR EXCELとFORTRANでそれぞれ単精度計算した場合では,結果が小数点第3位ぐらいで相違があるのですが,当方のプログラムミスか言語が違うことによることなのか,どなたか教えてください。結構困っています。
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
#1で述べたのはあくまで一般論です。
実際にどのくらいの誤差がでるかはやってみないと分かりません。
>exp(X)の計算では,Xの値が同じであれば,VisualBasicとFortranは同じ結果になるのでしょうか。
有効桁数までは同じだとは思いますが、その先はどうなるか分かりません。(違うかもしれないし、同じかもしれない)
プログラムはマシン語に翻訳されて実行されます。
マシン語の計算は加減乗除しかありませんからexp(X)のような関数は、コンパイラによって加減乗除だけの式に変換されます。どのような式に変換されるかはコンパイラによって違いますから、計算結果が同じになるとは期待しないほうがいいでしょう。
No.1
- 回答日時:
結果が小数点第3位ぐらいで相違とありますが、同じ数字の桁数はどのくらいなのでしょうか?
単精度の有効桁数は6~7桁です。
この有効桁数は加減乗除などの計算を繰り返すことによってだんだんと少なくなっていきます。
また、計算式によっては、この有効桁数が大幅に減少する場合があります。例えば、
1000012312 - 1000012105 = 207
この計算結果の207は精度的には全く意味を持ちません。
VisualBasicとFortranで全く同じ計算をしたとしても、それぞれのコンパイラは独自に計算式を最適化をしていますから、有効桁数以降の桁については微妙に違ってきます。
その誤差は計算を繰り返すことによってさらに広がっていきますから、最終結果にどのくらいの誤差が出るは常に考えておく必要があります。
(誤算論という分野があるくらい難しい問題です)
技術計算などで複雑な計算をする場合は、少なくとも単精度ではなく倍精度を使うべきだと思います。
ご回答ありがとうございました。
例えば,(Y-Ya)2[2:べき数]で,YとYaとの値の関係から,0~15000の範囲で変化します。
exp(X)の計算では,Xの値が同じであれば,VisualBasicとFortranは同じ結果になるのでしょうか。
出来ましたらご教授お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 計算機科学 ディジタル信号の問題がわかりません 1 2022/05/11 21:12
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- Excel(エクセル) エクセルでSUMIFS関数で条件範囲の部分が#valueになる。 4 2023/04/28 12:42
- その他(ソフトウェア) F-BASICで計算中の実行が中途で勝手に止まり、大変困っています。 2 2023/03/02 16:15
- 建設業・製造業 土量算出 3 2022/09/26 19:57
- その他(Microsoft Office) Excelで時間計算(負) 8 2023/02/26 05:47
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- 電気工事士 6.6kVケーブル単芯325sq-1.5kmの遮蔽銅テープ抵抗値は何Ω? 1 2023/05/02 21:06
- 計算機科学 2進数の計算について 2進数の値は全て8ビットで負数は2の補数形式とする。結果が8ビットで表現出来な 3 2023/07/22 14:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c languageで 簡単な質問があ...
-
有効数字について 以前質問をし...
-
float.h のテスト結果がおかしい
-
ExcelでPC(パソコン)によって...
-
三菱シーケンサ(Aシリーズ)で...
-
16進数 加算 減算 C言語
-
除算を使わずに10で割りたい。
-
乱数について
-
三角関数、逆三角関数の算出方...
-
”/”を使わずに割り算したいんで...
-
floatの有効桁数
-
計算の丸め誤差の解消について
-
2038年問題 日付算出
-
MATLABでの行列の全要素の和
-
C言語プログラミングにて、arct...
-
2進数の足し算(C言語)
-
C言語でセルオートマトンを作成...
-
ExcelのINT関数の計算結果がお...
-
Excel 計算結果誤差
-
VB6のFIX関数での誤差について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelでPC(パソコン)によって...
-
O(n log n)について2
-
有効数字について 以前質問をし...
-
c languageで 簡単な質問があ...
-
ExcelのINT関数の計算結果がお...
-
EXCELの関数"STDEV(標準偏差)"...
-
三菱シーケンサ(Aシリーズ)で...
-
VB.net Double と...
-
計算の丸め誤差の解消について
-
除算を使わずに10で割りたい。
-
2進数の足し算(C言語)
-
16進数 加算 減算 C言語
-
”/”を使わずに割り算したいんで...
-
CRCの計算方法について
-
VB6.0での小数点の扱いについて
-
VBAでミリ秒まで出力する方法
-
時刻の比較
-
2進数データのビット演算
-
教えて小数点の比較!(C言語)
-
C言語 型変換のタイミング
おすすめ情報