zoukankan      html  css  js  c++  java
  • 讨论c/c++计算小数的精度问题

    求出所有100以下整数与一位小数相乘等于相加的浮点数
    这个有Bug浮点数计算时精度会出现误差

    除非使用非常精确的类型或限制浮点的位数

    比如

    #include <iostream>
    int main()
    {
        using std::cout;
        using std::endl;
        unsigned int a = 0;
        double b;
        double temp;
        while (a <= 100)
        {
            b = 0;
            while (b < 100)
            {
                temp = 0;
                while (temp < 1)
                {
                    if (a + b + temp == a * (b + temp))
                        cout << a << b + temp << endl;
                    temp += 0.1;
                }
                a++;
                b++;
    
            }
        }
    }
    
     

    会产生这个问题

    cout.precision这个让我非常讨厌,一个伪限制精度

    师傅:这个不是BUG,而是精度问题,没有100%准确的~ 用宽度来进行控制吧~

    网友:既然限定一位小数既然限定一位小数就不用浮点了

    网友:也可以用10倍的数值,表示1位小数。

      比如
          1 表示 0.1
          11 表示 1.1

    网友:x + y/10 = x*y/10

            x*y - 10*x - y = 0

            (x-1)(y-10) = 10
            (x-1,y-10)={(1,10),(2,5),(5,2),(10,1)}
            (x,y/10)={(2,2),(3,1.5),(6,1.2),(11,1.1)}

            why need code

     

  • 相关阅读:
    [Zjoi2006]GameZ游戏排名系统
    二逼平衡树
    郁闷的小J
    Dynamic Rankings
    数列[专杀Splay版]
    星际争霸
    半平面交
    自适应辛普森
    7月31日
    规约先行-(三)代码格式
  • 原文地址:https://www.cnblogs.com/zero5/p/3452718.html
Copyright © 2011-2022 走看看