Зачем нужна математика.подшить возвращать в двойном размере?


когда я называю Math.ceil(5.2) возвращение double6.0. Моей естественной склонностью было думать, что Math.ceil(double a) возвращает long. Из документации:

ceil(double a)

возвращает наименьший (ближайший к отрицательной бесконечности)double значение то есть не меньше аргумента и равно математическому целое число.

но зачем возвращать a double, а не long когда результат является целым числом? Я думаю понимание причины этого может помочь мне понять Java немного лучше. Это также может помочь мне выяснить, попаду ли я в беду, бросив в long, например,

long b = (long)Math.ceil(a);

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

2 67

2 ответа:

ассортимент double больше, чем long. Например:

double x = Long.MAX_VALUE;
x = x * 1000;
x = Math.ceil(x);

что бы вы ожидали от последней строки, если Math.ceil вернулся long?

обратите внимание, что при очень больших значениях (положительных или отрицательных) числа в конечном итоге распределяются очень редко - поэтому следующее целое число больше целого x не будет x + 1 если вы понимаете, что я имею в виду.

двойной может быть больше, чем Long.MAX_VALUE. Если вы позвоните Math.ceil() при таком значении вы ожидаете вернуть то же значение. Однако если он вернул long, значение будет неверным.