我有点坚持以最大可用精度存储号码:
double tmp = 569.232306826889043804840184748172760009765625L;
我试图在屏幕上打印它:
printf("%0.52f\n", tmp);
这就是我所拥有的:
569.2323068268890400000000000000000000000000000000000000
这是我能达到的最高精度吗?
P.S.我使用的是Visual Studio 2008
答案 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。