代码之家  ›  专栏  ›  技术社区  ›  Michael Braha

计算C中双变量的最大值时出错

  •  0
  • Michael Braha  · 技术社区  · 8 年前

    我在这里遵循了解决方案: How to Calculate Double + Float Precision 并且无法计算double类型变量的最大值。

    double dbl_max = pow(2, pow(2, 10)) * (1-pow(2, -53));
    printf("%.2e", dbl_max);
    
    Result: inf
    

    或:

     double dbl_max = (pow(2, pow(2, 10)));
     printf("%.2e", dbl_max);
    
    Result: inf
    

    或:

    double dbl_max = pow(2, pow(2, 9)) * (1-pow(2, -53));
    printf("%.2e", dbl_max);
    
    Result: 1.34e+154
    

    为什么计算不适合变量?上面的顶部示例适用于浮点变量。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Armali    8 年前

    中间指数太高。 改变 pow(2, 10) (pow(2, 10) - 1) 还有它 应该有效。您可以通过将最终结果乘以 2.

    double dbl_max = pow(2, pow(2, 10)-1) * (1-pow(2, -53)) * 2;
    printf("%.2e", dbl_max);