dポイントプレゼントキャンペーン実施中!

エクセルにて

C=C0/2*(1-erf(A))
A=x/(2(Dt)^{1/2})

C0=0.0018
D=1E-21
t=0.0001
x=0,100 (0から100)
で計算をさせようとしたところ、x=1,100ではエラーとなりました。
エラー詳細で調べたところ、
erf(1581138830084.19)=#NUM!となりました。

どうしたらいいのかわかりません。
時間もなく焦っています。
お願いします!!

A 回答 (4件)

#2です。


お使いのEXCELのバージョンが多分古いようですね。

EXCELの扱うデータは
倍精度計算で
仮数部15桁まで、指数部-324~308)の範囲でしか計算しませんので
有効桁数(15桁)ですので
Aの値が
5.8以上では
elf(A)=1.000000000000000
となります。
また-5.8以下では
elf(A)=-1.000000000000000
となります。
今の場合A≧0なので
A1セルにあるAのデータのerf(A)の計算値をB1セルにおく場合
B1には
=IF(A1>=5.8,1.0,ERF(A1))
のように書けばいいでしょう。

>C=C0/2*(1-erf(A))
この式は
C=(C0/2)*(1-erf(A))
ですか?
そうなら、C1セルに
=(1-B1)*(C0/2)
とすればいいでしょう。C0はC0をおいたセル要素で置き換えて下さい。
ただこの場合も
B1が1に近づけば計算精度が落ちます。

Cの式は上の式でなく
C=C0/(2*(1-erf(A)))
であれば、Aが5.8以上でエクセルの計算では分母がゼロにな理ますので
注意して下さい。
A≧5.8の時、エクセルの計算ではC=∞になってエラーとなります。

Cの式が、どちらか、分かりませんので、
質問する場合は、分子・分母の境が明確に伝わるように、多重に括弧を使って式を書くようにして下さい。
    • good
    • 0

とりあえず、ものすごく大きなxのerf(x)を計算したいなら、


1-erfc(x)
で計算してください。また、以下のリンクによると、
erfc(x)は、excelの関数そのままではなくて、2*NORMSDIST(x*SQRT(2))と書くと、ちょっとはまともになるみたいですね。
http://support.microsoft.com/kb/893352

エクセルは指数や階乗を伴う関数の計算の仕方が、ものすごくアホです。統計処理(関数の内部で頻繁に階乗・べき乗を伴う関数を使う)では、事実上、エクセルはダメすぎて使用できません。というか、使用してはいけません。(もしかしたら最近のバージョンはちょっとは改善されているのかもしれませんが。)

エクセルは、計算式の途中で、オーバーフロー、とか桁落ちとかが発生すると、最終的な答え自体は倍精度の範囲に収まる場合でも、エラーになったり、有効桁が減った答えとかを出してきます。
ひどい場合には、なんのエラーメッセージもなしに、有効桁0桁(最初の桁すらあってない)みたいな答えを平気で返してきます。

まともな、統計処理・数値計算用のソフトであれば、普通は、計算の仕方を工夫することで(引数をまず最初にlogをとってから計算するなど)、最終的な答え自体が倍精度に収まる場合は、それなりの有効桁が残るようにするものなのですが。
    • good
    • 0

Excel のバージョンは?


手元の Excel2007 では erf(1581138830084.19) がエラーにならずにちゃんとした値 (といっても 1 だけど) を返してるんだが.

この回答への補足

2003です。

補足日時:2008/11/15 21:56
    • good
    • 0

>erf(1581138830084.19)=#NUM!


関数erf(A)
の引数Aが不適切(EXCELで扱える範囲を超えている)ということです。

A=x/(2(Dt)^{1/2})=1581138830084.19
が大き過ぎて不適切という事です。
Aの式をチェックして下さい。
Aの式で
D=1E-21
t=0.0001
x=1
とおくと
A=1581138830084.19
となります。
のでx=1の時にエラーが発生しているという事になります。
Aがある程度の大きさになったら
Cの計算式が
別の計算処理をするようにして下さい。

この回答への補足

その処理の仕方が知りたいです。
お願いします。

補足日時:2008/11/12 15:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!