Cet article est une suite de l'article ci-dessous. Le nombre de chiffres peut-il être Math.log10 (x) .floor + 1? -Qiita
Maintenant, combien de chiffres font 10 $ ^ {9942067} $ en décimal [^ ans]?
[^ ans]: Bien sûr, il s'agit de 9942068 chiffres sans calcul.
Facile avec Ruby.
irb(main):001:0> (10 ** 9942067).to_s.length
(irb):1: warning: in a**b, b may be too big
=> 8
e? S'agit-il de 8 chiffres? Que voulez-vous dire?
En outre, il y a quelques avertissements étranges. Ou cet avertissement est-il un indice? Bref, est-ce trop gros pour calculer correctement? Mais ce n'est pas une erreur.
Voulez-vous prendre .to_s.length
et l'exécuter?
Non, attendez, si un entier énorme est affiché, le terminal risque de devenir inopérant pendant un certain temps.
Nous le ferons.
irb(main):001:0> 10 ** 9942067
(irb):1: warning: in a**b, b may be too big
=> Infinity
Quoi? Qu'est-ce que Float :: INFINITY? Et si "une infinité positive de nombres à virgule flottante" même si c'est la puissance entière d'un entier?
La réponse "8" est-elle le nombre de caractères dans ʻInfinity`?
irb(main):002:0> Float::INFINITY.to_s
=> "Infinity"
Après tout.
Au fait, $ 10 ^ {9942066} $, dont l'exposant est un plus petit, peut être calculé par «10 ** 9942066». Cela dépend de la version de Ruby. Cet article est basé sur Ruby 2.7.1.
**
est dit être une spécification qui abandonne le calcul, émet un avertissement et retourne Float :: INFINITY
lorsque le résultat est susceptible d'être un entier trop grand.
Par conséquent, lorsqu'une telle situation est susceptible de se produire dans un programme pratique, il semble nécessaire de vérifier le résultat du calcul avec «fini?» Avant de l'utiliser.
Si vous voulez vraiment calculer 10 $ ^ {9942067} $, vous pouvez le calculer avec 10 ** 9942066 * 10
.
Recommended Posts