74 votes

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

Ce un m'a jeté pour une boucle un peu. Quand je l'appelle Math.ceil(5.2) le rendement est le double 6.0. Mon inclination naturelle est de penser que l' Math.ceil(double a) serait de retour d'un long. À partir de la documentation:

ceil(double a)

Retourne le plus petit (le plus proche à l'infini négatif) doublede la valeur ce n'est pas moins que l'argument est égal à une mathématique entier.

Mais pourquoi revenir un double plutôt qu'un long lorsque le résultat est un entier? Ce n'est pas une question urgente, mais je pense que la compréhension de la raison derrière cela peut m'aider à comprendre Java un peu mieux. Il se peut aussi m'aider à comprendre si je vais me faire des ennuis par un casting pour un long, par exemple, est

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

toujours ce que je pense qu'il devrait être? J'ai peur, il pourrait y avoir certaines limites les cas qui posent des problèmes.

69voto

Jon Skeet Points 692016

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

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

Qu'attendriez-vous de la dernière ligne si Math.ceil renvoyait long ?

Notez que pour des valeurs très grandes (positives ou négatives), les nombres sont distribués de manière très dispersée - le prochain entier supérieur à l'entier x ne sera donc pas x + 1 si vous voyez ce que je signifier.

13voto

Peter Lawrey Points 229686

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X