2012-02-28 5 views
0

現在、私は非正規化された浮動小数点数= 0x00300000を送信しています。この値が別の変数に設定される前に、不等式(var!= var)のチェックが行われます。つまり、NaNをチェックします。非正規化数の不等式チェックは失敗し、数はNaNとして検出されます。非正規化された浮動小数点数がNaNとして検出されます。どうして?

ここで間違っていることを教えてください。私のコードはC言語です。

ありがとうございます。

+0

私は「非正規化浮動小数点数が= 0x00300000」を好きかわからない...あなたがいます_必ず、浮動小数点変数にそのビットパターンがあることを確認してください。あなたがそれを印刷するとどうなりますか? –

+0

あなたのコードを教えてください。 (var!= var)の評価とNaNは、通常Cコードでは見られません。 Javascriptはい、私はあなたがCで何をしているのか混乱しています。あなたのコードを見せてください。 – selbie

+0

16進数で非正規化数を教えてください。有効な非正規化数がない場合にも、同じことを試して、何が起こっているのかを見てみましょう。 @ミステリ​​ー:それは私に示されているが、不平等チェックに失敗した同じ番号です。コンパイラの設定と関係がありますか? – kp11

答えて

2

平等のチェックが私のシステムで罰金だ:

#include <stdio.h> 
#include <string.h> 

int main(void) { 
    int i = 0x00300000; 
    float f = 0; 
    if (sizeof(f) != sizeof(i)) { 
     printf ("Urk!\n"); 
     return 1; 
    } 
    memcpy (&f, &i, sizeof(f)); 
    printf ("%.50f\n", f); 
    if (f == f) 
     puts ("Equal"); 
    else 
     puts ("Not equal"); 
    return 0; 
} 

この出力:

0.00000000000000000000000000000000000000440810381558 
Equal 
+1

同じです。また、iに値0xFFFFFFFFを使用すると、値NANと "Not equal"が期待どおりに出力されます。だから、私の推測では、質問の価値にOPが期待する価値がないということです。 –

+0

私はそれがコンパイラのオプションや設定で何かをしなければならないと思います。 – kp11

関連する問題