天天看點

dnan的好處

即使在​

​正确​

​​計算中,​

​0.0​

​​也不是稀有的值.​

​NaN​

​​總是錯誤的.0初化不會讓它更好.

​​

​NaN​

​​傳播.​

​0.0​

​​不能.

檢測所有代碼來檢測​​

​0.0​

​​是否有效?不,​

​誤報​

​​太多了,因為​

​0.0​

​​是浮點常用值.

除非它是​​

​全局/靜态​

​​變量,​

​C​

​​和​

​C++​

​​初化它們為垃圾.是​

​最糟糕​

​​的選擇,因為它​

​很難追蹤​

​​.

其他語言,基本上不​​

​預設​

​​初化浮點數為​

​NaN​

​​ 很好的是,在D中​

​導入C​

​中定義結構和在D中​

​導入的D​

​中定義結構具有​

​完全不同​

​初值,盡管文法相同!

// foo_c.c
struct Foo {
    float x;
};

// foo_d.d
struct Foo {
    float x;
};

// main.d
import foo_d;
import foo_c;
import std.stdio:;

void main(){
    foo_d.Foo f_d;
    foo_c.Foo f_c;
    writeln(f_d); // Foo(nan)
    writeln(f_c); // Foo(0)
}      

來看看下面的C程式:

#include <stdio.h>

 struct Foo { float x; };

 int main()
 {
    struct Foo f;
    printf("%g\n", f.x);
 }

 //gcc test.c
 ./a.out
 2.12133e-15