我們有特殊的功能,如std::nanl
來製作帶有有效載荷的NaN。目前,這是我必須做的打印回:如何打印NaN的有效載荷?
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdint>
int main()
{
const auto x=std::nanl("1311768467463790325");
std::uint64_t y;
std::memcpy(&y,&x,sizeof y);
std::cout << (y&~(3ull<<62)) << "\n";
}
這依賴於long double
具體表現,即它是80位類型的x87 FPU的。有沒有任何標準的方法來實現這一點,而不依賴於這種實施細節?
不可以。浮點類型的表示 - 包括NaN的任何支持 - 都是實現定義的。並非所有浮點表示都可以支持NaN。從C++實現的角度來看,因此不能保證NaN可以被表示爲AT ALL,並且 - 如果可以的話 - - 它將如何表示。 – Peter