タイトル : Re^2: IF文 複数条件判定のバグ 投稿日 : 2009/07/31(Fri) 10:32 投稿者 : おーたか
るしぇ様 早速のご回答ありがとうございます。 しかも検証もしていただき、ありがとうございます。助かります。 > はっきりとした理由までは示せないけど、とりあえず Double で処理されてます。 > 型変換せずに出力するとおかしな点は出力できませんが、演算すると丸め誤差を > 出力できるようです。 > IF 判定時に同様の型変換が起こってるかどうかなどの詳細説明までになってくると > もう少し詳しい人の意見を待ったほうが良いでしょう。 るしぇ様の検証より、内部的にはDoubleで処理されているのかと思い、 以下のようにDoubleで型変換して、DOUBLEで判定してみました。 (実際はa,b,c,dはpublic変数です) dim a as double = CDbl(0.0194) dim b as double = CDbl(-0.56) dim c as double = CDbl(2.18) dim d as integer = 20 dim kekka as string If a = 0.0957 AndAlso b = 2.84 AndAlso c = -0.8 AndAlso d = 40 Then kekka = "あ" ElseIf a = 0.0194 AndAlso b = -0.56 AndAlso c = 2.18 AndAlso d = 20 Then kekka = "い" ElseIf a = 0.0027 AndAlso b = 8.51 AndAlso c = 1.2 AndAlso d = 20 Then kekka = "う" ・・・ ・・・ ・・・ (ELSEIF文は30くらいあります) Else kekka = "ERROR!!!" EndIf しかし、DOUBLEにすると誤差があり、 やはり条件判定文には引っかかってくれませんでした。 結局のところ、浮動小数点での条件判定は難しい、ということでしょうか? それとも IF a = 0.0957 then ではなく、 IF a >=0.0957 AndAlso a < 0.0958 then と誤差分を考慮して書かなくてはならないのでしょうか? なにぶん判定条件が多いので、 もう少しシンプルな書き方があったらうれしいのですが・・・ |