據我所知,NaN's在雙重表示和非零分數的指數部分都是1表示的。 (從here信息)C++使用cast來測試NaN是否安全?
它是安全的楠使用類似的測試:
double num = 1.0;
// Do something to make num NaN
double* pointer = #
unsigned long long num2 = *((unsigned long long*)pointer);
if((unsigned long long)num2 == 0x7FF8000000000001)
{
// Got a NaN
}
我希望0x7FF8000000000001是正確的測試。
由於分數必須是非零來表示一個NaN,所以我猜測雙重表示的小數部分可以是任何東西,所以也許需要更復雜的測試,它將小數部分轉換爲1,如數字0x7FF8000000000001所示。 (注意結尾處的1,小數部分。)
那麼,像這樣的東西可以安全地使用?
編輯:正如邁克提到的,例如我應該用一個指針來得到位,我會讓現在這種變化......
http://stackoverflow.com/questions/10366485/problems-casting-nan-floats-to-int? – jcoder
有不同種類的南非,有std :: isnan ... – PlasmaHH
該演員做數字轉換;您需要投入一個引用或指針來重新解釋「double」的位爲整數類型。正如你所說的,你需要測試這個分數是非零的,不等於1.'std :: isnan'將正確和可移植地測試NaN;我只是用它。 –