Как я могу оценить это уравнение?

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

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));
Другие вопросы по тегам