float == double, или занимательная математика
Добавлено: 22 июл 2006, 12:54
Я, конечно, интуитивно догадывался, что сравнивать float с double не есть хорошо, но не подозревал, что всё так запущено :lol:
А посему спешу поделиться своим открытием
результаты соответственно:
Второй случай понятен, поскольку делим на число, кратное двойке,
то и машинную точность получаем правильной.
Но вот первый случай ...
Оно ведь выводит ОДИНАКОВЫЕ числа!
И, кроме того, чем же так знаменательны 0.25, 0.5 и 0.75 ?..
А посему спешу поделиться своим открытием
Код: Выделить всё
int m = 100;
for(int n = 5; n < 100; n += 5) {
double d = n;
d /= m;
float f = n;
f /= m;
System.out.println("(" + d + " == " + f + ")\t=\t" + (d == f));
}
System.out.println();
m = 128;
for(int n = 5; n < 100; n += 5) {
double d = n;
d /= m;
float f = n;
f /= m;
System.out.println("(" + d + " == " + f + ")\t=\t" + (d == f));
}
Код: Выделить всё
(0.05 == 0.05) = false
(0.1 == 0.1) = false
(0.15 == 0.15) = false
(0.2 == 0.2) = false
(0.25 == 0.25) = true
(0.3 == 0.3) = false
(0.35 == 0.35) = false
(0.4 == 0.4) = false
(0.45 == 0.45) = false
(0.5 == 0.5) = true
(0.55 == 0.55) = false
(0.6 == 0.6) = false
(0.65 == 0.65) = false
(0.7 == 0.7) = false
(0.75 == 0.75) = true
(0.8 == 0.8) = false
(0.85 == 0.85) = false
(0.9 == 0.9) = false
(0.95 == 0.95) = false
(0.0390625 == 0.0390625) = true
(0.078125 == 0.078125) = true
(0.1171875 == 0.1171875) = true
(0.15625 == 0.15625) = true
(0.1953125 == 0.1953125) = true
(0.234375 == 0.234375) = true
(0.2734375 == 0.2734375) = true
(0.3125 == 0.3125) = true
(0.3515625 == 0.3515625) = true
(0.390625 == 0.390625) = true
(0.4296875 == 0.4296875) = true
(0.46875 == 0.46875) = true
(0.5078125 == 0.5078125) = true
(0.546875 == 0.546875) = true
(0.5859375 == 0.5859375) = true
(0.625 == 0.625) = true
(0.6640625 == 0.6640625) = true
(0.703125 == 0.703125) = true
(0.7421875 == 0.7421875) = true
Второй случай понятен, поскольку делим на число, кратное двойке,
то и машинную точность получаем правильной.
Но вот первый случай ...
Оно ведь выводит ОДИНАКОВЫЕ числа!
И, кроме того, чем же так знаменательны 0.25, 0.5 и 0.75 ?..