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

C++ 如何以最大精度存储双精度,c++,c,visual-studio-2008,types,C++,C,Visual Studio 2008,Types,我对以最大可用精度存储数字有点迟钝: double tmp = 569.232306826889043804840184748172760009765625L; 我正试图在屏幕上打印它: printf("%0.52f\n", tmp); 这就是我得到的: 569.2323068268890400000000000000000000000000000000000000000000 这是我能达到的最大精度吗 p.S.我使用的是Visual Studio 2008双精度通常是以格式存储的 bina

我对以最大可用精度存储数字有点迟钝:

double tmp = 569.232306826889043804840184748172760009765625L;
我正试图在屏幕上打印它:

printf("%0.52f\n", tmp);
这就是我得到的:

569.2323068268890400000000000000000000000000000000000000000000

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



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

双精度通常是以格式存储的

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


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

一些平台可能会提供一个
长双精度
,它实际上比
双精度
大,但您的平台似乎没有


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

这是C实现中类型
双精度的精度。一致的C实现还有一个类型
long double
,它可以提供更高的精度


如果您需要更高的精度,那么有一些数字库可以提供任意精度的数字类型和函数来对它们进行操作。问题就是这样;它在很多平台上工作,包括与你相关的一些东西——Win32和Win64 .< /P>在C++中你可以用来找出极限和精度。你还应该记住,不仅有精度,还有ALS精度。很多十进制数字不能用浮点数精确表示。
我对以最大可用精度存储数字有点迟钝
为什么卡住了?只需声明一个
double
(或
longduble
),就可以获得“最大精度”。否则我不完全理解你的问题。如果你需要更高的精度,请查看有关浮点数的一些信息,因为网络上到处都是高精度的库。该语言没有指定
double
的精度,尽管它确实指定了最低要求。52位是典型的,但不是必需的。准确地说,这个答案描述了IEEE-754二进制双精度(“binary64”)格式的一些特性。这是与问题相关的浮点格式,但不应认为这意味着C要求实现使用该格式作为其类型
double
的表示。不过,这是目前最常见的选择。该链接网站包含“众所周知,它还可以在32位和64位模式下在Windows上工作。”。