TLDR: versuchen Fraction
half = Fraction(1, 2)
for x in range(1, 1075):
half = half/2
print(half)
wird
1/4
1/8
...
1/202402253307310618352495346718917307049556649764142118356901358027430339567995346891960383701437124495187077864316811911389808737385793476867013399940738509921517424276566361364466907742093216341239767678472745068562007483424692698618103355649159556340810056512358769552333414615230502532186327508646006263307707741093494784
1/404804506614621236704990693437834614099113299528284236713802716054860679135990693783920767402874248990374155728633623822779617474771586953734026799881477019843034848553132722728933815484186432682479535356945490137124014966849385397236206711298319112681620113024717539104666829230461005064372655017292012526615415482186989568
Sie geben kann die kleinste verfügbare positive float
mit
herausfinden
>>> import sys
>>> sys.float_info.min
2.2250738585072014e-308
dann beispielsweise folgende wir, dass
>>> 2 * sys.float_info.min > pow(2, -1074)
True
das heißt von 2 nächste Abteilung finden scheint als kleinste float
verfügbar positive weniger.
BTW ihre Differenz gleich
>>> diff = 2 * sys.float_info.min - pow(2, -1074)
>>> diff
4.4501477170144023e-308
aber es ist interessant, dass
>>> diff == 2 * sys.float_info.min
False
während
>>> diff/2 == sys.float_info.min
True
P. S.: 01 AufteilungObjekte von float
s wird uns float
>>> half = Fraction(1, 2)
>>> half = half/2.0
>>> type(half)
<class 'float'>
so Ihren Code durch 2.0
mit Teilung wird das gleiche Ergebnis und für die korrekte Arbeit mit Fraction
s geben sollten Sie addieren/subtrahieren/Divisions/multiplizieren es mit int
s oder andere Fraction
s wie
half = Fraction(1, 2)
for x in range(1, 1075):
half = half/Fraction(2.0)
print(half)
PPS: es gibt eine 012.313.etwa für nicht genutzte Objekt als Namen unterstreichen verwenden, so wird es besser sein, schreiben
half = Fraction(1, 2)
for _ in range(1, 1075):
half = half/2
print(half)
Haben Sie dieses Tutorial zur numerischen Darstellung in Python gelesen? https://docs.python.org/3/tutorial/floatingpoint.html –
Ja, Sie haben Python's Limit erreicht; Die Gründe dafür haben mit den traditionellen Grenzen der Fließkomma-Arithmetik zu tun. Wenn du tiefer gehen willst, schlage ich vor, dass du Pakete durchsuchst, die speziell dafür entworfen wurden, mit beliebiger Genauigkeit umzugehen, wie http://mpmath.org/ – Hamms