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

tem*_*ema 8 c c++ types visual-studio-2008

我有点坚持使用最大可用精度存储数字:

double tmp = 569.232306826889043804840184748172760009765625L;
Run Code Online (Sandbox Code Playgroud)

我正试图在屏幕上打印它:

printf("%0.52f\n", tmp);
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的:

569.2323068268890400000000000000000000000000000000000000

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


PS我正在使用Visual Studio 2008

Use*_*ess 15

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

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


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

有些平台可能会提供一个long double实际上比a大的平台double,但是你的平台似乎没有.

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


Joh*_*ger 6

这是doubleC实现中类型的精度.符合C的实现也有一种类型long double,可以提供更高的精度.

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