【问题标题】:How to store double with maximum precision如何以最高精度存储双精度
【发布时间】:2015-06-05 00:15:21
【问题描述】:

我有点纠结于以最大可用精度存储数字:

double tmp = 569.232306826889043804840184748172760009765625L;

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

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

这就是我所拥有的:

569.2323068268890400000000000000000000000000000000000000

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


附言我正在使用 Visual Studio 2008

【问题讨论】:

  • 在 C++ 中,您可以使用 std::numeric_limits 找出限制和精度。
  • 您还应该记住,不仅有精确度,还有精确度。很多十进制数不能用浮点数精确表示。
  • I'm a bit stucked with storing number with maximum available precision 为什么卡住了?只需声明一个double(或long double),您就有了“最大精度”。否则我不完全理解你的问题。
  • 查看IEEE 754 了解有关浮点数的一些信息
  • 如果您需要更高的精度,网上有很多高精度库。

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


【解决方案1】:

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

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


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

一些平台可能提供long double,它实际上比double大,但你的似乎没有。

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

【讨论】:

  • 该语言没有指定double 的精度,但它确实指定了最低要求。 52 位是典型的,但不是必需的。
  • 确切地说,这个答案描述了 IEEE-754 二进制双精度(“binary64”)格式的一些特征。这是与问题相关的浮点格式,但不应被视为暗示 C 要求实现使用该格式作为其类型 double 的表示。不过,这是迄今为止最常见的选择。
【解决方案2】:

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

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

【讨论】:

  • 链接的网站包含“众所周知,它也可以在 32 位和 64 位模式的 Windows 上工作。”。
猜你喜欢
  • 2013-03-17
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
相关资源
最近更新 更多