tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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
と誤差分を考慮して書かなくてはならないのでしょうか?

なにぶん判定条件が多いので、
もう少しシンプルな書き方があったらうれしいのですが・・・

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。