如何以最高精度存储双精度

How to store double with maximum precision

我有点难以存储具有最大可用精度的数字:

double tmp = 569.232306826889043804840184748172760009765625L;

我正在尝试将其打印在屏幕上:

printf("%0.52f\n", tmp);

这就是我得到的:

569.2323068268890400000000000000000000000000000000000000

这是我能达到的最大精度吗?


P.S。我正在使用 Visual Studio 2008

double 通常以 IEEE 754 binary64 格式存储。

二进制 64 具有 52 的精度,而不是 52 位十进制数字 - 这相当于最多 17 位十进制数字,这就是您所显示的。


Is this the maximum precision which I can achieve?

一些平台 可能 提供 long double 实际上比 double 大,但你的平台似乎没有。

如果你想要更高的精度,你可以使用一个库来公开你的硬件支持的一些 larger/more 精确类型(例如 80 位扩展双精度),或者一个任意精度的库在软件中。

这是您的 C 实现中类型 double 的精度。符合 C 的实现也有一个类型 long double可能 提供更高的精度。

如果您需要比这更高的精度,那么可以使用数字库提供任意精度的数字类型和对其进行运算的函数。 GNU Multiple Precision Arithmetic Library 就是其中之一;它适用于许多平台,包括与您相关的平台 -- Win32 和 Win64。