Как я могу оценить это уравнение?
Я думаю, это довольно понятно из кода. Очевидно, я не оцениваю одно и то же снова и снова, это просто цифры для объяснения моей проблемы. Я предполагаю, что это переполнение / недостаток, но я не знаю, как с этим справиться.
double d = (1 / (684985+157781));
System.out.println(d); // returns 0.0
System.out.println(Math.log(d)); // returns -Infinity.
5 ответов
(1 / (684985+157781))
является целочисленным выражением, поэтому оно будет 0
, Ноль затем присваивается double d
, как 0.0
,
Попробуйте изменить 1
в 1.0
заставить это выражение быть float, или 1.0D
заставить его удвоиться.
Еще один человек сделал целочисленное деление:
double d = (1.0 / (684985.0+157781.0));
Нет, в Java, если вы используете целые числа, результат деления будет снова целочисленным, вы должны привести как минимум один операнд к удвоению.
double d = (1 / (double)(684985+157781));
Попробуйте использовать double d = (1.0 / (684985+157781));
Обратите внимание 1.0
часть: вы хотите форсировать двойную оценку.
Это первое выражение вычисляется в целочисленной арифметике. Чтобы получить ожидаемый ответ, вам нужно вычислить его в арифметике с плавающей точкой, таким образом:
double d = (1.0 / (684985.0+157781.0));