Ich brauche eine Funktion, die eine Liste von Floats erhält, und berechnet die GCD dieser Liste.gcd der Liste der Floats - falsche Ausgabe von Fraktionen
Zum Beispiel angesichts der Eingang [1/2.0, 1/3.0]
Ich erwarte, dass der Ausgang 1/6.0
sein aber es ist nicht. es druckt 5.55111512313e-17
oder mit anderen Worten, Null. Das ist mein Code:
def gcd(L):
return reduce(fractions.gcd, L)
print gcd([1/2.0, 1/3.0])
Was ist hier falsch? Kann ich es irgendwie reparieren?
Der nächste IEEE 754 64-Bit-Binärschwimmer zu 1/3.0 ist 0.3333333333333333314829616256247390992939472198486328125. Möglicherweise müssen Sie die Eingaben als Fraction-Instanzen angeben, die genau 1/3.0 darstellen können, ohne zuerst float zu durchlaufen. –
@SergeBallesta Es ist gut definiert, als die größte Zahl, die ein Faktor aller Eingaben ist. Es ist einfach nicht was das OP braucht. –