我有点被最大可用精度的存储号卡住了:
double tmp = 569.232306826889043804840184748172760009765625L;
我正试着把它打印在屏幕上:
printf("%0.52fn", tmp);
这就是我所拥有的:
569.2323068268890400000000000000000000000000000000000000atr
这是我能达到的最高精度吗?
p.S.我正在使用Visual Studio 2008
双精度通常以IEEE 754二进制64格式存储。
二进制64有52个位的精度,而不是52个十进制数字——这相当于最多17个十进制数字,这就是您所显示的。
这是我能达到的最高精度吗?
一些平台可能提供的long double
实际上比double
大,但您的平台似乎没有。
如果您想要更高的精度,您可以使用一个库来公开硬件支持的一些更大/更精确的类型(例如80位扩展双精度),也可以使用在软件中工作的任意精度库。
这是C实现中类型double
的精度。保形C实现还有一个类型long double
,可以提供更高的精度。
如果您需要更高的精度,那么有一些数字库可以提供任意精度的数字类型和函数来对其进行操作。GNU多精度算术库就是其中之一;它可以在许多平台上工作,包括与您相关的平台——Win32和Win64。