即使在
正确
計算中,
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