如上所述,
static_assert(sizeof(long double) == 16, "long double must be 128 bits");
无法构建,但assert(sizeof(long double) == 16);
通过运行时检查,并且std::cout << sizeof(long double) << " bytes\n";
打印16 bytes
。我正在使用 g++20 x86_64 但我在 Visual Studio 上。
这是我来自
*_EPSILON
的
<cfloat>
值
FLT_EPSILON=1.1920928955078125e-07
DBL_EPSILON=2.220446049250313080847263336182e-16
LDBL_EPSILON=1.08420217248550443400745280087e-19
在 Microsoft 的标准库和运行时中,
double
和 long double
在逻辑上不同,但二进制相同。您无法从 long double
中获得更高的精度;参见:如果您需要更高的算术精度并且绝对有使用long double,您可能想链接到GNU标准库的MinGW实现,它确实将long double实现为更高精度的类型。
但如果使用这种类型不是硬性要求,可以考虑使用专用的高精度算术库;也许https://gmplib.org/