Pourquoi Math.ceil renvoie-t-il un double?

Lorsque j’appelle Math.ceil(5.2) le retour est le double 6.0 . Mon inclination naturelle était de penser que Math.ceil(double a) retournerait long . De la documentation:

ceil(double a)

Renvoie la plus petite valeur double (la plus proche de l’infini négatif) qui n’est pas inférieure à l’argument et qui est égale à un entier mathématique.

Mais pourquoi retourner un double plutôt qu’un long quand le résultat est un entier? Je pense que comprendre la raison derrière cela pourrait m’aider à mieux comprendre Java. Cela pourrait aussi m’aider à comprendre si je vais avoir des problèmes en jetant un long , par exemple

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

toujours ce que je pense que ça devrait être? Je crains qu’il y ait des cas limites qui posent problème.

La plage du double est supérieure à celle du long . Par exemple:

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

Que Math.ceil vous de la dernière ligne à faire si Math.ceil est revenu long ?

Notez que pour des valeurs très élevées (positives ou négatives), les nombres finissent par être dissortingbués très peu, de sorte que le prochain nombre entier supérieur à l’entier x ne sera pas x + 1 si vous voyez ce que je veux dire.

Un double peut être plus grand que Long.MAX_VALUE . Si vous appelez Math.ceil() sur une telle valeur, vous vous attendez à renvoyer la même valeur. Cependant, si elle était longue, la valeur serait incorrecte.