Sto solo rivedendo alcune nozioni di base su Python e c'è un problema difficile nel confrontare i numeri in virgola mobile.Confronto di numeri in virgola mobile in Python
2.2 * 3.0 == 6.6
3.3 * 2.0 == 6.6
Ho pensato che entrambi dovevano restituire un Falso. Tuttavia, il secondo mi ha dato una verità.
Please help me here. Grazie!
Non confrontare mai due numeri in virgola mobile con '=='. Usa 'abs (a-b)
Steve
@Steve Sì, ne sono consapevole, ma grazie ancora per la nota :) – Zhiya
@Steve: un confronto corretto è più complicato di questo, poiché la precisione dei float è un numero di cifre, non un valore numerico assoluto. Qualcosa come 'abs (a-b) <= rel_prec * max (abs (a), abs (b))' è migliore (con rel_prec vicino a 1e-16, ad esempio, per i float a doppia precisione di Python). Oltre a questo, dovrebbe essere gestito anche il caso di un valore zero. Non ho controllato completamente questo, ma il seguente potrebbe funzionare: 'abs (a-b) <= rel_prec * (max (abs (a), abs (b)) if a! = 0! = B else 1)'. – EOL