Вся проблема кода находится в функции Bakery_map. При вычислении арифметических операций программа теряет один знак после запятой. Как этого избежать?
int float_comparison_N(float a, float b, int N) {
for (int i = 0; i < N; i++) {
a *= 10;
b *= 10;
if ((int)a != (int)b) return 0;
a -= (int)a;
b -= (int)b;
}
return 1;
}
float Bakers_map(float x) {
if (x < 0.5)
return 2.0 * x;
else
return 2.0 * x - 1.0;
}
int main() {
setlocale(LC_ALL, "Rus");
float a = 0.2324325;
float b = 0.2324325;
while (a==b)
{
a = Bakers_map(a);
b = Bakers_map(b);
std::cout << std::setprecision(100) << a << "\t\t\t";
std::cout << std::setprecision(100) << b << std::endl;
}
return 0;
}
Пример выходных данных:
0.4648649990558624267578125 0.4648649990558624267578125
0.929729998111724853515625 0.929729998111724853515625
0.85945999622344970703125 0.85945999622344970703125
0.7189199924468994140625 0.7189199924468994140625
0.437839984893798828125 0.437839984893798828125
0.87567996978759765625 0.87567996978759765625
0.7513599395751953125 0.7513599395751953125
0.502719879150390625 0.502719879150390625
0.00543975830078125 0.00543975830078125
0.0108795166015625 0.0108795166015625
0.021759033203125 0.021759033203125
0.04351806640625 0.04351806640625
0.0870361328125 0.0870361328125
0.174072265625 0.174072265625
0.34814453125 0.34814453125
0.6962890625 0.6962890625
0.392578125 0.392578125
0.78515625 0.78515625
0.5703125 0.5703125
0.140625 0.140625
0.28125 0.28125
0.5625 0.5625
0.125 0.125
0.25 0.25
0.5 0.5
0 0
0 0
0 0
0 0