讨论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

 

原文地址:https://www.cnblogs.com/zero5/p/3452718.html