Forum >> Principianti >> la funzione round serve ad approssimare?

Pagina: 1

Ciao a tutti,



quando uso la funzione round, se la cifra successiva è 5 non sempre esegue l'approssimazione in modo esatto.



Per esempio:

round(3.5) dà 4

round(4.5) dà 4 invece di 5

round(5.5) dà 6

round(6.5) dà 6 invece di 7

e così via

round(7.625, 2) dà 7.62 invece di 7.63




Quando la cifra di destra è >= 5 si approssima sempre per eccesso.

Mi date una spiegazione per favore?
Ah, interessante. Mi accodo alla domanda.
Questo scherzo lo fa solo con py3, mentre in py2 i risultati sono quelli che ci si aspetterebbe.

>>> round(6.5)
6
>>> round(6.500000000000001)
7


*** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione ***
Ὅμηρος 蟒蛇 said @ 2017-10-02 15:51:56:
Ciao a tutti,
quando uso la funzione round, se la cifra successiva è 5 non sempre esegue l'approssimazione in modo esatto.
Per esempio:

round(3.5) dà 4
round(4.5) dà 4 invece di 5
round(5.5) dà 6
round(6.5) dà 6 invece di 7

e così via

round(7.625, 2) dà 7.62 invece di 7.63

Quando la cifra di destra è >= 5 si approssima sempre per eccesso.
Mi date una spiegazione per favore?

For the built-in types supporting round(), values are rounded to the
closest multiple of 10 to the power minus ndigits; if two multiples are
equally close, rounding is done toward the even choice (so, for example,
both round(0.5) and round(-0.5) are 0, and round(1.5) is
2).


Inoltre,


Note
The behavior of round() for floats can be surprising: for example,
round(2.675, 2) gives 2.67 instead of the expected 2.68.
This is not a bug: it’s a result of the fact that most decimal fractions
can’t be represented exactly as a float. See Floating Point Arithmetic: Issues and Limitations for
more information.



Da https://docs.python.org/3/library/functions.html#round.

THE 🍺-WARE LICENSE (Revision ㊷):
<carlo@🐍.it> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝
Grazie, perché in py2 allora i risultati sono quelli che ci si aspetterebbe?
E' per lo stesso motivo che, per esempio:

print(tan(pi)) dà come risultato -1.2246467991473532e-16 invece di 0 ?


--- Ultima modifica di alexc in data 2017-10-02 17:37:54 ---
Ὅμηρος 蟒蛇 said @ 2017-10-02 17:28:18:
Grazie, perché in py2 allora i risultati sono quelli che ci si aspetterebbe?
Definisci "quelli che ci si aspetterebbe" :P

Sempre dalla pagina di documentazione, Python 2.7 implemantava un algoritmo molto più semplice:

Values are rounded to the closest multiple of
10 to the power minus ndigits; if two multiples are equally close,
rounding is done away from 0 (so, for example, round(0.5) is 1.0 and
round(-0.5) is -1.0).

Maggiori info sull'argomento sono in https://en.wikipedia.org/wiki/Rounding#Tie-breaking

Ὅμηρος 蟒蛇 said @ 2017-10-02 17:28:18:
E' per lo stesso motivo che, per esempio:
print(tan(pi)) dà come risultato -1.2246467991473532e-16 invece di 0 ?

Questo è spiegato in https://docs.python.org/3.6/tutorial/floatingpoint.html


THE 🍺-WARE LICENSE (Revision ㊷):
<carlo@🐍.it> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝
Gentilissimo, a tutto c'è una spiegazione


Pagina: 1



Esegui il login per scrivere una risposta.