2010-05-09 7 views
0

Juste un jour avant de participer au tour de qualification de Google Code Jam. C'est ma première expérience d'un tel concours de codage en ligne. C'était vraiment amusant.Valeurs de précision double

Il y avait trois problèmes donnés dont j'ai pu résoudre deux. Mais sur l'un des problèmes, on m'a demandé de travailler avec des valeurs qui sont vraiment énormes. Je suis un gars Java et je pensais que j'irais pour double variable. Malheureusement, la précision du double n'était pas suffisante. De plus, j'y ai assisté durant la phase de clôture, je n'avais pas le temps d'y plonger beaucoup (plus la résolution de 1 suffit pour me qualifier à la prochaine étape).

Ma question est la suivante, Comment avoir un mécanisme de précision supérieur à deux fois. Mon expérience de codage est en Java, donc ce serait bien si vous pouviez répondre dans ce sens.

Merci

Répondre

5

Java a BigDecimall pour l'arithmétique de précision arbitraire - mais il est beaucoup, beaucoup plus lent que d'utiliser double.

Il est également possible que le problème en question soit supposé être résolu en utilisant des transformations algébriques et par ex. travailler avec des logarithmes.

1

Vous pouvez utiliser des nombres de précision arbitraires, tels que BigDecimal - c'est plus lent mais aussi précis que vous le spécifiez.

2

Si le problème nécessite des entiers, vous pouvez utiliser BigInteger.

De même, long est légèrement meilleur que double pour les entiers, avec 63 bits comparé à 53 bits de précision (en supposant des nombres positifs).

+0

Yah .. int -> long -> BigInteger, float -> double -> BigDecimal – bwawok

Questions connexes