【问题标题】:What is the precision of long double in C++?C++中long double的精度是多少?
【发布时间】:2010-10-03 08:04:49
【问题描述】:

有人知道如何在特定平台上找出long double 的精度吗?我似乎在 17 位十进制数字后失去了精度,这与我仅使用 double 时相同。我希望得到更多,因为double 在我的平台上用 8 个字节表示,而long double 是 12 个字节。

在您问之前,这是针对欧拉计划的,所以是的,我确实需要超过 17 位数字。 :)

编辑:感谢您的快速回复。我刚刚确认在我的系统上使用 long double 只能得到 18 位十进制数字。

【问题讨论】:

  • 它是否有可能在某个时候将事物转换为常规双精度?
  • 是的,这绝对是可能的。昨晚我一直到凌晨 2 点才检查我的代码,不过我很确定它一直是双倍的。

标签: c++ precision long-double


【解决方案1】:

您可以通过std::numeric_limits了解:

#include <iostream>     // std::cout
#include <limits>       // std::numeric_limits
int main(){
    std::cout << std::numeric_limits<long double>::digits10 << std::endl;
}

【讨论】:

  • 这会告诉你精确度还是极限?
  • 它告诉你精度。即双精度数可以有多少位。 min() 和 max() 告诉你极限
  • 更具体地说,它会告诉您可以将多少四舍五入成一个长双精度数而不会丢失数字。
  • 是的,虽然 min() 和 max() 会告诉您即使您失去精度也可以拥有的限制。这里 max 是 1.18973e+4932,而 digits10 是 18。
  • 在 x86 上,它往往是 80 位扩展格式:尾数为 64 位,指数为 15 位,可能大约是 18 位安全数字。 Double 是 53 位尾数或 16 个圆形安全数字。
【解决方案2】:

您可以使用<cfloat>。具体来说:

LDBL_DIG

【讨论】:

  • 感谢您的链接。 LDBL_DIG 给出十进制数字。 LDBL_MANT_DIG 给了我二进制数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 2013-12-31
相关资源
最近更新 更多