[python] round v python 3.0

Jan Janech devel na atlas.sk
Pondělí Únor 2 19:32:27 CET 2009


Samozrejme, ono to ide "zapnut" aj globalne pre instalaciu pythonu a nie 
pre jeden program. Nikdy by som nieco take vsak nespravil, lebo to moze 
narusit funkcnost programov zavislych na novom chovani fcie round.

Ak Vam to vsak nevadi, tak nech sa paci:

Subor sitecustomize.py v Lib adresari pythonu (/usr/lib/python2.x v 
linuxe, c:\Python2x\Lib vo windows) (neexistuje, treba vytvorit):

__builtins__['round'] = lambda num: math.floor(num+0.5) if num >= 0 \
                                else -math.floor(-num+0.5)

Jan Janech

Tovim wrote:
> Reply to Jan Janech, Pavel Kosina
> 
> Právě jsem si přečetl v Googlu, ani jsem nevěděl, že to existuje: Na
> zaokrouhlování jsou dvě metody, "common" a "round-to-even". 
> Jestli Python zaokrouhluje podle metody "zaokrouhli na sudou", potom to má
> dobře. Chceme-li tedy mít zaokrouhlíno tak, jak jsme zvyklí, měli bychom si
> vytvořit nějaké udělátko.
> 
> Jane Janechu, myslel jsem, že když napíši "__builtins__.round = lambda num:
> math.floor(num+0.5)",
> tak si někam trvale zapíšu opravenou verzi round.
> Kýho výra. Chodí to jenom pro aktuální seanci.
> Poraďte mi chlapci, jde-li to někam trvale zapsat.
> Děkuji. Tovim
> 
> 
> 
> Ja som aj pisal, ze fcia round zostane aka je. Iba sa prida dalsia pre 
> aritmeticke zaokruhlovanie. V pripade, ze chcete aktualizovat fciu 
> round, tak treba spravit:
> 
> __builtins__.round = lambda num: math.floor(num+0.5)
> 
> 
> Inak, som si vsimol, ze to zle zaokruhluje zaporne cisla, takze spravne 
> bude:
> 
> math.round = lambda num: math.floor(num+0.5) if num >= 0 else \
>                          -math.floor(-num+0.5)
> 
> Jan Janech
> 
> Tovim wrote:
>> Olé, round(2.5) již dává 3; jenom 2 maličké poznámky:
>> V Python30 je round v hlavním modulu (nevolá se math).
>> Navržená úprava platí jen pro aktuální seanci.
>>
>> Myslím si, že to je Pythonu bota, i když se o tom někde bla bla bla píše.
>> Tovim
>>
>>
>>
>>
>>
>> import math
>> math.round = lambda num: math.floor(num+0.5)
>>
>> round sa bude stale spravat ako sa ma, a pribudne math.round na klasicke 
>> aritmeticke zaokruhlovanie.
>>
>> Jan Janech
>>
>> azurIt wrote:
>>> taktiez si myslim, ze je to velmi nestastne riesenie, mala sa pre toto
>> vytvorit nova funkcia. existuje tam aj nieco pre 'klasicke' zaokruhlovanie
> ?
>>> azur
>>>
>>>
>>>> -----Pôvodná správa-----
>>>> Od: Pavel Kosina [mailto:geon na post.cz]
>>>> Komu: Konference PyCZ <python na py.cz>
>>>> Predmet: Re: [python] round v python 3.0
>>>>
>>>>
>>>> Děkuji, ale stejně je to zvláštní. Nevím, nakolik se Python používá více
>>>> k vědeckým a statistickým výpočtům než na běžnou matematiku. A i kdyby
>>>> -  tento způsob zaokrouhlování mohl zůstat někde v modulu math nebo
>>>> scientific (kdyby existoval). Pokud budeme mít extrémní případ ze samých
>>>> čísel 0,5 - 1,5 - 2,5- 3,5- apod tak se chyba horší, protože např. nikdy
>>>> nedosáhneme na zaokrouhlení 1 -3 - 5  apod.-.-..... To s Vámi
>>>> nepolemizuji, jen přemýšlím nahlas.
>>>>
>>>> --
>>>> geon
>>>> Pavel Kosina
>>>>
>>>>
>>>>
>>>>
>>>> Stepan Wagner napsal(a), dne 1.2.2009 16:28:
>>>>> citace ze stranky
>> http://en.wikipedia.org/wiki/Rounding#Round-to-even_method
>>>>> """When dealing with large sets of scientific or statistical data,
>>>>> where trends are important, traditional rounding on average biases the
>>>>> data upwards slightly. Over a large set of data, or when many
>>>>> subsequent rounding operations are performed as in digital signal
>>>>> processing, the round-to-even rule tends to reduce the total rounding
>>>>> error, with (on average) an equal portion of numbers rounding up as
>>>>> rounding down. This generally reduces upwards skewing of the
>>>>> result."""
>>>>>
>>>>> Stepan
>>>>>
>>>>> 2009/2/1 Pavel Kosina <geon na post.cz>:
>>>>>
>>>>>> Nevíte někdo, *proč* v Python 3.0 platí:
>>>>>>
>>>>>>
>>>>>>>>> round(0.5)
>>>>>>>>>
>>>>>> 0
>>>>>>
>>>>>>>>> round (1.5)
>>>>>>>>>
>>>>>> 2
>>>>>>
>>>>>>>>> round (2.5)
>>>>>>>>>
>>>>>> 2
>>>>>>
>>>>>>>>> round (3.5)
>>>>>>>>>
>>>>>> 4
>>>>>>
>>>>>> Jo, máme to napsané v manuálu, že to takhle je
>>>>>> http://docs.python.org/3.0/library/functions.html#round, ale mě zajímá
>> proč
>>>>>> to je takto, a ne podle toho, jak se to učí v 5. třídě, tedy že od
>> pětky
>>>>>> včetně nahoru se zaokrouhluje nahoru vždy, a ne jen někdy .....
>>>>>>
>>>>>> Díky
>>>>>>
>>>>>> --
>>>>>> geon
>>>>>> Pavel Kosina
>>>>>>
>>>>>>
>>>> _______________________________________________
>>>> Python mailing list
>>>> Python na py.cz
>>>> http://www.py.cz/mailman/listinfo/python
>>> _______________________________________________
>>> Python mailing list
>>> Python na py.cz
>>> http://www.py.cz/mailman/listinfo/python
>>>
>>>
>>>
>>
> 
> 


-- 

____________________________
Ing. Jan Janech
Katedra softverovych technologii
Fakulta riadenia a informatiky
Zilinska Univerzita


Další informace o konferenci Python