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