Pourquoi les Mathématiques.plancher de retour d'un double?
Officiel Javadoc dit que Math.floor()
renvoie une double
qui est "égale à une mathématique entier", mais alors pourquoi ne pas retourner un int
?
Vous devez vous connecter pour publier un commentaire.
Selon la même Javadoc:
Si l'argument est
NaN
ou un infini positif ou nul ou négatif égal à zéro, alors le résultat est le même que l'argument. Ne pouvez pas faire cela avec unint
.Le plus grand
double
valeur est également plus grande que la plus grandeint
, de sorte qu'il devrait être unlong
.C'est pour la précision. Les données en double de type a de 53 bits de mantisse. Entre autres choses, cela signifie qu'un double peut représenter tous les entiers jusqu'à 2^53, sans perte de précision.
Si vous stocker un grand nombre en un nombre entier, vous obtiendrez un dépassement de capacité. Des nombres entiers de 32 bits.
Retour de l'entier comme un double est la bonne chose à faire ici, car il offre beaucoup plus utile nombre de gamme que d'un entier pourrait.
D'autres vous l'ai dit le pourquoi, je vais vous dire comment faire pour arrondir correctement étant donné que vous voulez faire. Si vous allez seulement utiliser des nombres positifs, alors vous pouvez utiliser cette instruction:
Cependant, l' (int) arrondit toujours vers 0. Donc, si vous voulez faire un nombre négatif:
Dans mon cas, je n'ai pas envie de le faire. J'ai utilisé le code suivant pour faire les arrondis, et il semble gérer tous les cas de bord bien:
(int) Math.floor(a)
? Il est probablement plus efficace et c'est plus court.Que feriez-vous voulez revenir si vous lui avez donné un double plus grand que le plus grand int ou long?
(Il est vrai que si c'est plus grand que le plus grand de la précision sera faible, en tout cas - il peut ne pas être le plus proche théorique entier - mais tout de même...)
De sorte que l'erreur et d'autres non valeurs entières peuvent correctement cascade à travers une série de calculs.
Par exemple, si vous nourrissez Pas un Nombre (NaN) en Mathématiques.étage, ça va passer.
Si il est revenu entier qu'elle ne pouvais pas me passer de ces statuts de ou de erreurs le long, et vous pourriez obtenir de mauvais résultats à partir d'une version antérieure de calcul qui ont l'air bonnes, mais sont mal après un traitement ultérieur.
-Adam
Tout comme il y est un entier et un flottant de la division en Java, il existe des entiers et à virgule flottante façons de faire de chaussée:
ou
mais vous devez toujours être prudent avec l'utilisation de chaussée avec précision finie arithmétique: votre calcul de x peut donner quelque chose comme 1.99999999 qui va être étages sur 1, pas 2 par les deux formes. Il existe de nombreux algorithmes qui ont besoin de contourner cette limitation pour éviter de produire des résultats faux pour certaines valeurs d'entrée.