• 警报C++精密整数除法计算损失


    非常偶然发现了一个精度损失的问题,简单来说:

    有表达式: l = i/30 + j/40 + k/25, 求当{i,j,k} = {50,85,27}时l的值,非常easy,用计算器立即能够算出答案为4.8717,可是编写了下面程序来实现:

    int i = 50,j = 85, k = 27;

    double l = i/30 + j/40 + k/25;

    执行后,结果显示4.000000000。

     

         为什么?这是由于在C++中两个整数相处得到的结果还是整数。故除法都被四舍五入了再相加。就得到结果4.00000了。或许你会说,这种小儿科的问题我不会犯,当然情况是这种时候非常easy看出来,也比較easy避免,但是当i,j。k都是类的三个整数类型成员的时候。常常easy忘了他们是整数类型的,而写出上述表达式。所以,在敲代码时,上述类型的式子要统一写成:

    int i = 50,j = 85, k = 27;

    double l = i/30.0 + j/40.0 + k/25.0;

         这样就不会出错了。

         呵呵,这是早就应该知道的问题该,现在才发现,但是,为时未晚,fighting~ O(∩_∩)O~


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    P2324 [SCOI2005]骑士精神
    Codeforces Round #574 (Div. 2) A~E Solution
    P4132 [BJOI2012]算不出的等式
    spring笔记(三)
    spring笔记(二)
    C3P0连接池参数解释
    spring笔记(一)
    hibernate笔记(四)
    hibernate笔记(三)
    hibernate笔记(二)
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4854456.html
Copyright © 2020-2023  润新知