
以下のような技術的な計算式があります。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelでPC(パソコン)によって...
-
ExcelのINT関数の計算結果がお...
-
c languageで 簡単な質問があ...
-
VB.net Double と...
-
16進数 加算 減算 C言語
-
有効数字について 以前質問をし...
-
三菱シーケンサ(Aシリーズ)で...
-
powf を使わずにべき乗を計算
-
EXCELの関数"STDEV(標準偏差)"...
-
どんな数字を入力してもaverage...
-
2進数の足し算(C言語)
-
O(n log n)について2
-
”/”を使わずに割り算したいんで...
-
floatの有効桁数
-
C言語プログラミングにて、arct...
-
バタフライ演算
-
Log関数に関する質問
-
除算を使わずに10で割りたい。
-
長い桁(小数点以下)が計算でき...
-
VB6のFIX関数での誤差について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
有効数字について 以前質問をし...
-
c languageで 簡単な質問があ...
-
ExcelでPC(パソコン)によって...
-
O(n log n)について2
-
2進数の足し算(C言語)
-
16進数 加算 減算 C言語
-
EXCELの関数"STDEV(標準偏差)"...
-
三菱シーケンサ(Aシリーズ)で...
-
VB.net Double と...
-
MATLABでの行列の全要素の和
-
除算を使わずに10で割りたい。
-
floatの有効桁数
-
”/”を使わずに割り算したいんで...
-
ExcelのINT関数の計算結果がお...
-
VBAでミリ秒まで出力する方法
-
VB6.0での小数点の扱いについて
-
Fortran において変数の定義
-
計算の丸め誤差の解消について
-
C言語について質問です。
-
CRCの計算方法について
おすすめ情報