g++ static_assert 对于 `sizeof(long double) == 16` 失败

问题描述 投票:0回答:1

如上所述,

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

c++ g++ long-double
1个回答
0
投票

在 Microsoft 的标准库和运行时中,

double
long double
在逻辑上不同,但二进制相同。您无法从
long double
中获得更高的精度;参见:
https://learn.microsoft.com/en-us/cpp/c-language/type-long-double
https://learn.microsoft.com/en-us/cpp/cpp/fundamental-types-cpp?view=msvc-170#floating-point-types

如果您需要更高的算术精度并且绝对使用long double,您可能想链接到GNU标准库的MinGW实现,它确实将long double实现为更高精度的类型。
但如果使用这种类型不是硬性要求,可以考虑使用专用的高精度算术库;也许https://gmplib.org/

© www.soinside.com 2019 - 2024. All rights reserved.