讨论c/c++计算小数的精度问题
求出所有100以下整数与一位小数相乘等于相加的浮点数
这个有Bug浮点数计算时精度会出现误差
除非使用非常精确的类型或限制浮点的位数
比如
# include <stdio.h>
int main()
{
int a, b, c;
for (a = 0; a < 100; a++)
{
for (b = 0; b < 100; b++)
{
for (c = 1; c <= 9; c++)
{
if (a * 10 + b * 10 + c == a * (10 * b + c))
printf("%d + %d.%d == %d * %d.%d\n", a, b, c, a, b, c);
}
}
}
return 0;
}
// let a 0-100
// let b.c 0.0-100.0 (let c 1-9)
// a + b.c == a * b.c
// 10 * (a + b.c) == 10 * a * b.c
// 10a + 10b + c == a * (10b + c)
#include <cmath>
#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.1;
while (temp < 1)
{
if (fabs((a + b + temp) - (a * (b + temp))) < 0.000001)
cout << a << '\t' << b << '+' << temp << endl;
temp += 0.1;
}
b++;
}
a++;
}
}
#include <cmath>
#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.1;
while (fabs(temp - 1) > 0.000001)
{
if (fabs((a + b + temp) - (a * (b + temp))) < 0.000001)
cout << a << '\t' << b << '+' << temp << endl;
temp += 0.1;
}
b++;
}
a++;
}
}
for(int i=0;i<100;i++)
for(int j=0;j<1000;j++)
{
if(i+j == i*j)......
}