Как я могу оценить это уравнение? - PullRequest
3 голосов
/ 12 декабря 2011

Я думаю, это довольно понятно из кода. Очевидно, я не оцениваю одно и то же снова и снова, это просто примеры, чтобы объяснить мою проблему. Я предполагаю, что это переполнение / недостаточность, но я не знаю, как с этим справиться.

double d = (1 / (684985+157781));

System.out.println(d); // returns 0.0
System.out.println(Math.log(d)); // returns -Infinity.

Ответы [ 5 ]

8 голосов
/ 12 декабря 2011

(1 / (684985+157781)) является целочисленным выражением, поэтому оно будет равно 0.Ноль затем присваивается double d как 0.0.

Попробуйте изменить 1 на 1.0, чтобы заставить это выражение быть плавающим, или 1.0D, чтобы заставить его удвоиться.

7 голосов
/ 12 декабря 2011

Еще один человек, сделанный целочисленным делением:

double d = (1.0 / (684985.0+157781.0));
5 голосов
/ 12 декабря 2011

Нет, в Java, если вы используете целые числа, результат деления снова будет целочисленным, вы должны привести как минимум один операнд к удвоению.

double d = (1 / (double)(684985+157781));
4 голосов
/ 12 декабря 2011

Попробуйте использовать double d = (1.0 / (684985+157781));

Обратите внимание на 1.0 часть: вы хотите форсировать двойную оценку.

3 голосов
/ 12 декабря 2011

Это первое выражение вычисляется в целочисленной арифметике.Чтобы получить ожидаемый ответ, нужно вычислить его в арифметике с плавающей точкой, например:

double d = (1.0 / (684985.0+157781.0));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...