c++ - 解析长和双

标签 c++ parsing long-double

<分区>

下面只有几行 C++ 代码:

    long re = 103491683;
    double temp = (double)re * (double)re;
    cout<<"\n"<<"double * double = \t"<<(long)temp;
    long temp2 = re * re;
    cout<<"\n"<<"long * long = \t\t"<<temp2;

它返回 2 个不同的值:

    double * double =   10710528450172488
    long * long =       10710528450172489 

我不明白发生了什么,我在 java 上遇到了这个错误,我也在 C++ 上尝试过,这就是问题所在。请帮助我(抱歉我的英语不好)

最佳答案

double 数有 64 位存储。在这 64 个中,1 个用于存储符号,11 个用于存储指数,53 个用于存储十进制数字。这意味着您可以达到的数字的最大精度是 15.95 个十进制数字 53 * log10(2)。

您的数字 10,710,528,450,172,489 有 17 位十进制数字,因此略微超出了 double 可以达到的精度。

在 64 位系统上,带符号的 long 中可以达到的最大数是 2^63 - 1 = 9,223,372,036,854,775,807 大于您的数字。

关于c++ - 解析长和双,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36302468/

相关文章:

C++ 非常小的 float ,精度

c++ - 为什么 const int 适合 char 大括号 init?

parsing - 使用 shift-reduce 解析构建解析树

c++ - 如何在 C++ 中使用更高的精度

c++ - 哪个编译器给出 longest long double

java - 如何使用Jsoup获取包含某个img的Element数?

c++ - 有理函数级数展开的最佳算法

c# - 在登录菜单上运行 C# 应用程序

C++ 这个语法是如何工作的?

Java8 LocalDateTime解析错误