Dieser Artikel ist eine Fortsetzung des folgenden Artikels. Kann die Anzahl der Ziffern Math.log10 (x) .floor + 1 sein? -Qiita
Wie viele Stellen hat $ 10 ^ {9942067} $ in Dezimalzahl [^ ans]?
[^ ans]: Natürlich sind es 9942068 Ziffern ohne Berechnung.
Einfach mit Ruby.
irb(main):001:0> (10 ** 9942067).to_s.length
(irb):1: warning: in a**b, b may be too big
=> 8
e? Ist es 8 Ziffern? Was meinst du?
Außerdem gibt es einige seltsame Warnungen. Oder ist diese Warnung ein Hinweis? Kurz gesagt, ist es zu groß, um richtig zu berechnen? Aber es ist kein Fehler.
Möchten Sie .to_s.length
nehmen und ausführen?
Nein, warten Sie, wenn eine große Ganzzahl angezeigt wird, ist das Terminal wahrscheinlich für eine Weile nicht mehr funktionsfähig.
Ja mach mal.
irb(main):001:0> 10 ** 9942067
(irb):1: warning: in a**b, b may be too big
=> Infinity
Was? Was ist Float :: INFINITY? Was ist, wenn es "positive Unendlichkeit von Gleitkommazahlen" wird, obwohl es die ganzzahlige Potenz einer ganzen Zahl ist?
Ist die Antwort "8" die Anzahl der Zeichen in "Unendlichkeit"?
irb(main):002:0> Float::INFINITY.to_s
=> "Infinity"
Nach alldem.
Übrigens kann $ 10 ^ {9942066} $, dessen Exponent eins kleiner ist, mit 10 ** 9942066
berechnet werden.
Dies hängt von der Version von Ruby ab. Dieser Artikel basiert auf Ruby 2.7.1.
"**" soll eine Spezifikation sein, die die Berechnung abbricht, eine Warnung ausgibt und "Float :: INFINITY" zurückgibt, wenn das Ergebnis wahrscheinlich eine zu große Ganzzahl ist. Wenn eine solche Situation in einem praktischen Programm wahrscheinlich auftritt, erscheint es daher notwendig, das Berechnungsergebnis vor der Verwendung mit "endlich" zu überprüfen.
Wenn Sie wirklich $ 10 ^ {9942067} $ berechnen möchten, können Sie dies mit 10 ** 9942066 * 10
berechnen.
Recommended Posts