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

时间:2015-03-31 15:24:12

标签: c++ c visual-studio-2008 types

我有点坚持以最大可用精度存储号码:

double tmp = 569.232306826889043804840184748172760009765625L;

我试图在屏幕上打印它:

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

这就是我所拥有的:

  

569.2323068268890400000000000000000000000000000000000000

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


P.S.我使用的是Visual Studio 2008

2 个答案:

答案 0 :(得分:15)

双倍通常以IEEE 754 binary64格式存储。

binary64有52个的精度,而不是52个十进制数字 - 这相当于最多17个十进制数字,这就是你要显示的数字。


  

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

某些平台可能提供的long double实际上比double更大,但您的似乎并非如此。

如果想要更高的精度,可以使用一个库,该库可以显示硬件支持的更大/更精确的类型(例如80位扩展双精度型),也可以使用在软件中工作的任意精度库。 / p>

答案 1 :(得分:6)

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

如果您需要更高的精度,那么有数字库提供任意精度的数字类型和函数来对它们进行操作。 GNU Multiple Precision Arithmetic Library就是这样的一个;它适用于许多平台,包括与您相关的平台 - Win32和Win64。