我在使用最大可用精度存储数字方面遇到了一些困难:
double tmp = 569.232306826889043804840184748172760009765625L;
我正在尝试将它打印在屏幕上:
printf("%0.52f\n", tmp);
我得到的结果如下:
569.2323068268890400000000000000000000000000000000000000
这是我可以达到的最高精度吗?
补充:我正在使用Visual Studio 2008。
我在使用最大可用精度存储数字方面遇到了一些困难:
double tmp = 569.232306826889043804840184748172760009765625L;
printf("%0.52f\n", tmp);
我得到的结果如下:
569.2323068268890400000000000000000000000000000000000000
这是我可以达到的最高精度吗?
补充:我正在使用Visual Studio 2008。
一个double通常以IEEE 754二进制64位格式存储。
二进制64位具有52个位的精度,而不是52个十进制数字 - 这相当于最多17个十进制数字,这正是您正在显示的内容。
这是我能达到的最高精度吗?
某些平台可能会提供实际上比double
更大的long double
,但你的似乎没有。
如果您需要更高的精度,则可以使用公开支持您硬件的一些更大/更精确类型的库(例如80位扩展双精度),或者在软件中工作的任意精度库。
double
的精度,但它确实指定了最低要求。52位是典型值,但不是必需的。 - Keith Thompsondouble
类型的精度。符合标准的C实现也有一个long double
类型,它可能提供更高的精度。
std::numeric_limits
来查找限制和精度。 - Some programmer dudedouble
(或long double
),你就可以获得“最大精度”。否则,我不完全理解你的问题。 - PaulMcKenzie