C ++ Precision使用long long和double

汉斯·兰达

我正在尝试使用c ++。我编写了一个简单的函数,该函数使用非常大的数字来查找三角形的面积。

我将两个大数传递给函数,并从一个单独的函数getValue()返回一个来自不同方程式的单独值。我很好奇为什么将1放在括号外的行上,如下所示:

return (long long)(a - b / 2.0) + b + 1;

我得到值9007200509008001

当我将1放在括号内时,如下所示:

return (long long)(a - b / 2.0 + 1) + b;

我得到9007200509008000

即使计算得出相等的答案,第二个值也要比第一个小一个。

#include <iostream>

double triangleArea(int b, int h)
{
    long long bh = (long long)b * h;
    return 0.5 * bh;
}

long long getValue()
{
    int deltaY = 18014400;
    int deltaX = 1000000000;

    long b = deltaY + deltaX + 1600;
    double a = triangleArea(deltaX, deltaY);
    return (long long)(a - b / 2.0) + b + 1;
}

int main(int argc, char **argv) 
{
    std::cout << getValue() << std::endl;
}

我敢肯定,答案对某些人来说可能是显而易见的,但是我无法解决这个问题。有人可以解释吗?

Serge Ballesta

当您除以时,2.0您将隐式转换为double。双重精度限制为大约15个十进制数字。因此,第16数字发生了什么是完全确定的,但可能并非您所期望的。

如果需要准确性,请尝试使用long longunsigned long long仔细控制您没有溢出。如果这还不够,那么您将不得不使用多精度算术(例如GMP)。因为一旦使用双浮点数,就将精度限制为53个二进制数字或大约15-16个十进制数字。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 short 和 long 代替 int 和 double (C++)

来自分类Dev

在C ++中混淆为“ double to long long”

来自分类Dev

confuse in "double to long long" in c++

来自分类常见问题

在C ++中,“ long”,“ long long”,“ long int”和“ long long int”有什么区别?

来自分类Dev

C unsigned long long和imulq

来自分类Dev

C转换double-> long-> short(使用右移“ >>”)

来自分类Dev

在目标C中将double转换为long long

来自分类Dev

sizeof long double和精度不匹配?

来自分类Dev

在计算幂时使用int,double和long

来自分类Dev

C和C ++中long long int的不同结果?

来自分类Dev

带有double / long double的C ++精度行为

来自分类Dev

为什么(C ++)从long long unsigned int转换为long double然后返回0

来自分类Dev

为什么(c ++)从long long unsigned int转换为long double然后返回0

来自分类Dev

在C ++中将long long转换为Hex和Binary

来自分类Dev

在C ++中将long long转换为Hex和Binary

来自分类Dev

Scala 中 Long 和 Double 之间的转换和比较

来自分类Dev

C ++转换类型(SLODWORD和long)

来自分类Dev

使用float,double和long double后,所有数字未显示在控制台中

来自分类Dev

使用循环计算long double的能力在c中给出错误的答案

来自分类Dev

在 C 中使用 long double 会在减法后产生奇怪的结果

来自分类Dev

我可以使用long double来计算c语言中的整数吗

来自分类Dev

C ++便携式将long转换为double

来自分类Dev

C ++ fabs(long double)编译器警告

来自分类Dev

c编程,无法获得适当的long double值

来自分类Dev

在C ++中的文件上将long值写为double

来自分类Dev

为什么不能使用long long int类型?C ++

来自分类Dev

为什么不能使用long long int类型?C ++

来自分类Dev

为什么在我的C代码中不能将“ long long int”和“ int”一起使用?

来自分类Dev

类型铸造 long double 到 long long

Related 相关文章

  1. 1

    使用 short 和 long 代替 int 和 double (C++)

  2. 2

    在C ++中混淆为“ double to long long”

  3. 3

    confuse in "double to long long" in c++

  4. 4

    在C ++中,“ long”,“ long long”,“ long int”和“ long long int”有什么区别?

  5. 5

    C unsigned long long和imulq

  6. 6

    C转换double-> long-> short(使用右移“ >>”)

  7. 7

    在目标C中将double转换为long long

  8. 8

    sizeof long double和精度不匹配?

  9. 9

    在计算幂时使用int,double和long

  10. 10

    C和C ++中long long int的不同结果?

  11. 11

    带有double / long double的C ++精度行为

  12. 12

    为什么(C ++)从long long unsigned int转换为long double然后返回0

  13. 13

    为什么(c ++)从long long unsigned int转换为long double然后返回0

  14. 14

    在C ++中将long long转换为Hex和Binary

  15. 15

    在C ++中将long long转换为Hex和Binary

  16. 16

    Scala 中 Long 和 Double 之间的转换和比较

  17. 17

    C ++转换类型(SLODWORD和long)

  18. 18

    使用float,double和long double后,所有数字未显示在控制台中

  19. 19

    使用循环计算long double的能力在c中给出错误的答案

  20. 20

    在 C 中使用 long double 会在减法后产生奇怪的结果

  21. 21

    我可以使用long double来计算c语言中的整数吗

  22. 22

    C ++便携式将long转换为double

  23. 23

    C ++ fabs(long double)编译器警告

  24. 24

    c编程,无法获得适当的long double值

  25. 25

    在C ++中的文件上将long值写为double

  26. 26

    为什么不能使用long long int类型?C ++

  27. 27

    为什么不能使用long long int类型?C ++

  28. 28

    为什么在我的C代码中不能将“ long long int”和“ int”一起使用?

  29. 29

    类型铸造 long double 到 long long

热门标签

归档