Я переживает Java Tutorial, и побежал через некоторые странности в этой небольшой пример ...
Код:
class SqrRoot {
public static void main(String args[]) {
double num,sroot,rerr,resquare;
for(num = 1.0; num < 100.0; num++) {
sroot = Math.sqrt(num);
System.out.println("Square root of " + num + " is " + sroot);
// compute rounding error
resquare = (sroot * sroot);
rerr = num - resquare;
System.out.println("Rounding error: num + " - " + resquare + " = " + rerr);
System.out.println();
}
}
}
Возвращение странно - когда я увидела результаты, я написал небольшую программу, которая вычитается ряд буквальном чисел с плавающей точкой, все с обычной двоичной в десятичную oddness (1.002 - 1.001 \u003d .000999999997), но когда я запускаю вышеуказанным код, я получаю, что ниже:
Код:
Square root of 1.0 is 1.0
1.0 - 1.0 = 0.0
Square root of 2.0 is 1.4142135623730951
2.0 - 2.0000000000000004 = -4.440892098500626E-16
Square root of 3.0 is 1.7320508075688772
3.0 - 2.9999999999999996 = 4.440892098500626E-16
....
Я не уверен, что если он что-то я делаю неправильно или что является причиной его. Я искал всего и все мы обнаружили, это люди с просьбой об аппаратных ограничений арифметики с плавающей точкой. Любая помощь будет с благодарностью.
----- ----- Обновление темы
После просмотра он размещен здесь, я просто реализуется, я не принимая во внимание научно-нотации ... Мальчик с немым я чувствую сейчас
