| 
    
     |  | 計算精度を吸収させたい。 
 よろしくお願いします。
 
 2つの引数を比較し、どっちが大きいかを出力する関数を作りたいと
 思っています。関数名を bigsmall(value1,value2)とします。
 以下のように書いてみました。
 
 Function bigsmall(Value1 As Double, Value2 As Double)
 
 If Value1 >= Value2 Then
 bigsmall = "value1が大きいか等しい"
 Else
 bigsmall = "value1が小さい"
 End If
 
 End Function
 
 
 使用しているのは、Excell 2000 を XP Pro 上で動かしています。
 B3 に 1          (これが value1)
 C2 に 1          (これが value2)
 C3 に =bigsmall(b3,c2)  という式を入れると、
 
 B       C
 ------------+---------------
 2 |          1
 3 |   1     =bigsmall(b3,c2)
 
 C3 には、 "value1が大きいか等しい" と正しく表示されます。
 
 
 今度は、
 B3 に   0.7
 B4〜B6に、直上のセル+0.1 の式
 C2 に   1
 C6 に   =bigsmall(b6,c2) という式を入れます。
 
 B       C
 ------------+---------------
 2 |          1
 3 |  0.7
 4 |  =B3+0.1
 5 |  =B4+0.1
 6 |  =B5+0.1     =bigsmall(b6,c2)
 
 
 B6の値は 1 ですから、上と同じ結果を返すはずですが、
 C6には、   "value1が小さい" と表示されます。
 
 調べてみると、B6-C2の値は、 -1E-16 となっていて、
 どうやら上のたった、0.1を3回足し算しただけで、精度の問題がでていて
 判定を間違うようです。
 引数の精度を single にしようが、doubleにしようが、B6から数値を
 拾った段階でもうおしまい、、って感じ。
 
 実は待ち行列理論で用いる、ある収束する関数を製作していて、
 引数 a,b が、a >= b になる場合には、処理を中断させ、-1を返す。
 それ以外の場合には、収束値を求める(ご想像に難くなく、a >=b で
 無限ループに陥ってしまう。)ようにしたいのですが、
 この問題で、関数自体は問題なさそうなのに、頭を抱えています。
 
 どなたか、よい解決策はないでしょうか?
 
 
 |  |