讨论c/c++计算小数的精度问题

来源:互联网 发布:mac ps2017怎么破解 编辑:程序博客网 时间:2024/05/22 17:17

求出所有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

 

0 0