>>> modf(3.4)
(0.39999999999999991, 3.0)
>>> modf(2.5)
(0.5, 2.0)
>>> modf(3.8)
(0.79999999999999982, 3.0)
>>> exp(1)
2.7182818284590451
>>> modf(4.5)
(0.5, 4.0)
>>> modf(8.6)
(0.59999999999999964, 8.0)
>>> modf(5.5)
(0.5, 5.0)
>>> modf(6.6)
(0.59999999999999964, 6.0)
>>> modf(1.1)
(0.10000000000000009, 1.0)
--
Michał Listowski <michal.l...@interia.pl>
A co Ci się w nich nie podoba?
--
Jarek Zgoda
Skype: jzgoda | GTalk: zg...@jabber.aster.pl | voice: +48228430101
"We read Knuth so you don't have to." (Tim Peters)
> >>>> modf(2.5)
> > (0.5, 2.0)
> >>>> modf(3.8)
> > (0.79999999999999982, 3.0)
> A co Ci się w nich nie podoba?
Dodając 2.0 i 0.5 mam 2.5
ale już 0.79999999999999982 + 3.0 nie będzie 3.8
--
Michał Listowski <michal.l...@interia.pl>
Witaj w świecie arytmetyki zmiennoprzecinkowej i błędów zaokrągleń.
.pk.
http://docs.python.org/tut/node16.html
Dlatego, że masz komputer liczący w systemie binarnym, nie dziesiętnym ;-P
http://en.wikipedia.org/wiki/IEEE_floating-point_standard
ATSD, nie bardzo wiem w czym ci to przeszkadza, reprezentacja tekstowa
jest taka, jak oczekujesz
>>> 3.8
3.7999999999999998
>>> print _
3.8
bart
--
"Apple: plucky outsiders, the eternal underdog, the place where
the success-phobic go to rage at the do-betters. " (c)Tom's Hardware
http://candajon.azorragarse.info/ http://azorragarse.candajon.info/
> http://docs.python.org/tut/node16.html
>
Hm. Problem zaokrągleń znam. Miałem nadzieje iż w Pythonie jakoś to rozwiązano.
Dziękuję bardzo za odpowiedz.
--
Michał Listowski <michal.l...@interia.pl>
Rozwiązano w sposób, który nie maskuje problemu. Uważasz, że to złe
rozwiązanie?
> Rozwiązano w sposób, który nie maskuje problemu. Uważasz, że to złe
> rozwiązanie?
Pół na pół. Chciałbym zrobić jakieś dłuższe obliczenia matematyczne i chciałbym mieć dobrze zaokrąglone wartości. Jednak tutaj muszę sprawdzać czy takie wartości są na pewno poprawne.
Z drugiej strony mogę dość łatwo zauważyć gdzie następują małe przekłamania. Też ma to swoje zalety.
zresztą zawsze zostaje:
l=3,9999998
l=int(l+0.5)
--
Michał Listowski <michal.l...@interia.pl>
To kwestia koprocesora, który stoi za plecami Pythona. Jeśli chcesz mieć
dokładne (choć wolniejsze i mniej wygodne) obliczenia, to możesz użyć
biblioteki decimal.
--
Pozdro... Tupteq
> To kwestia koprocesora, który stoi za plecami Pythona. Jeśli chcesz mieć
> dokładne (choć wolniejsze i mniej wygodne) obliczenia, to możesz użyć
> biblioteki decimal.
Czyli jakoś to rozwiązali. Bardzo fajnie :)
--
Michał Listowski <michal.l...@interia.pl>
Znaczy czym twoim zdaniem sytuacja różni się od dowolnego innego jezyka
programowania korzystającego z arytmetyki koprocesora? (czyli praktycznie
wszystkie, z wyjątkiem COBOLa).
Jak chcesz żeby wartości były poprawnę, to zrób analizę numeryczną.
Jak liczysz pieniądze w systemie transakcyjnym banku, to użyj COBOLa,
albo typu Decimal w Pythonie.
bart
--
`long long long' is too long for GCC
http://candajon.azorragarse.info/ http://azorragarse.candajon.info/
A może jednak? ;)
In [6]: print "%.2f %.2f" % math.modf(3.4)
0.40 3.00
In [7]: print "%.2f" % (0.79999999999999982 + 3.0)
3.80
Jeśli potrzebujesz tylko dwóch miejsc po przecinku to float (double)
są ok, jeśli tylko pamiętasz jak dużej dokładności _wyświetlania_
potrzebujesz. Nie nadają się do niczego więcej (nawet nie myśl o
liczeniu przy ich pomocy pieniędzy).
--
pozdrawiam,
SG
> Jeśli potrzebujesz tylko dwóch miejsc po przecinku to float (double)
> są ok, jeśli tylko pamiętasz jak dużej dokładności _wyświetlania_
> potrzebujesz. Nie nadają się do niczego więcej (nawet nie myśl o
> liczeniu przy ich pomocy pieniędzy).
Czemu? Jak pomylisz sie o setna czesc grosza to raczej nie bedziesz
glodowal.
Jednej operacji nie musisz się bać. Ale jak wykonasz ich bardzo wiele to
myślę, że mógłbyś się nieźle wzbogadzić na arytmetyce
zmiennoprzecinkowej :-)
Pozdrawiam.
> Nie nadają się do niczego więcej (nawet nie myśl o
> liczeniu przy ich pomocy pieniędzy).
Racz nie byc jednak tak kategoryczny.
Nadaja sie do liczenia pieniedzy rowniez
(co nie znaczy ze sa dla tego zastosowania najlepsze).
Pod warunkiem ze wie sie jak liczb FP uzywac
i robi sie to 'zgodnie ze sztuka' i konsekwentnie.
Sam format decimal , bcd, money itp rowniez pelnej
poprawnosci sam z siebie nie gwarantuje.
AK
> Jednej operacji nie musisz się bać. Ale jak wykonasz ich bardzo wiele to
> myślę, że mógłbyś się nieźle wzbogadzić na arytmetyce
> zmiennoprzecinkowej :-)
Nieprawda !
Nie w tym istnieje niebezpieczenstwo uzywania double.
Decimal czasami jest nawet gorszy od double.
Decimal to tylko wewnetrzny format dzieietny,
czyli lepszy niz dwojkowy do obliczen finansowych
jednak nei jest to format i pelnej prezyzji (bo byc nie moze).
AK
Chyba, że to będzie jakieś kilka milionów pomyłek... dziennie? ;-)
--
pozdrawiam,
SG
Licząc pieniądze musisz zaokrąglać tak, jak każe Ustawa, a nie tak
jest specyfikuje IEEE 754. A ustawa jest pisana z myślą o systemie
dziesiątnym. Jak się pomylisz o jeden grosz w tę, lub we wtę, to niby
nic takiego, ale wystarczy, coby Urząd Skarbowy stwierdził, że się nie
zgadza. Do liczenia kasy należy używać typu Decimal.
bart
--
cvs server: file `middle.east' had a conflict and has not been modified
http://candajon.azorragarse.info/ http://azorragarse.candajon.info/
Nie chodzi o to, żeby było dobrze. Chodzi o to, żeby było zgodnie z Ustawą.
bart
--
"Nie musisz mi tlumaczyc szanowna kolezanko czym jest internet - dysponuje
laczem stalym i wiem cos na ten temat !!!" - (c)Dariusz Kaminski
http://candajon.azorragarse.info/ http://azorragarse.candajon.info/
> A ustawa jest pisana z myślą o systemie dziesiątnym. Jak się pomylisz o jeden
> grosz w tę, lub we wtę, to niby nic takiego, ale wystarczy, coby Urząd
> Skarbowy stwierdził, że się nie zgadza. [...]
Słyszałem, że dopuszcza się pewne drobne rozbieżności.
w.
> Nie chodzi o to, żeby było dobrze. Chodzi o to, żeby było zgodnie z
> Ustawą.
Sam decimal z siebie _absolutnie_ nie zapewnia ze bedzie zgodnie z ustawa.
No wlasnie : jak jest zgodnie z ustawa ?
AK
Widzisz, np. (1.00/3)*3 w Pythonie licząc na floatach wyjdzie 1.00, a zgodnie
z ustawą powinno wyjść 0.99 albo 1.02 ;-)
bart
--
"In theory, this should not happen. In practice, it seems to." (c)acornscsi.c
http://candajon.azorragarse.info/ http://azorragarse.candajon.info/
Decimal sam z siebie zapewnia, że zaokrąglenia będą zgodne z systemem
dziesiętnym. Bynajmniej nie oznacza to, że będzie to wyniki całkowicie
poprawny z matematycznego punktu widzenia.
> No wlasnie : jak jest zgodnie z ustawa ?
Obecnie -- standardowo, zgodnie z systemem dziesiętnym.
bart
--
"wierzę w Apple i jego OS" (c) Wojciech Orliński
http://candajon.azorragarse.info/ http://azorragarse.candajon.info/
>> Sam decimal z siebie _absolutnie_ nie zapewnia ze bedzie zgodnie z
>> ustawa.
>
> Decimal sam z siebie zapewnia, że zaokrąglenia będą zgodne z systemem
> dziesiętnym.
Taaa. zwlaszcza jakis rodzaj sredniej kumulowanej tez ?
Poza tym zaokraglen w systemie dziesietnym jest _cale mnostwo_ !
Ktory jest zgodny z ustawa ?.
Up, Down, Hal-Up, Half_Down, Ceil, Floor, czy tez Half-Even
a moze jednak Half-Odd itp itd ?
Te same zaokraglenia mozna zrealizowac rowniez na double.
Nie przecze ze decimal jest tu gorszy ale sam z siebie _nieczego_
nie zapewnia.
> Bynajmniej nie oznacza to, że będzie to wyniki całkowicie
> poprawny z matematycznego punktu widzenia.
Nieumiejetne stosowanie decimal jest nawet niekiedy
_gorsze_ niz zastosowanie w to miejsce double.
>> No wlasnie : jak jest zgodnie z ustawa ?
>
> Obecnie -- standardowo, zgodnie z systemem dziesiętnym.
Nie masz pojecia o ustawie.
(Ja juz tez,, bo juz zapomnialem :) - ale Ty napewno nawet jej nie
widziales na oczy)
AK
>
> Nieumiejetne stosowanie decimal jest nawet niekiedy
> _gorsze_ niz zastosowanie w to miejsce double.
>
potrafisz podać przykład?
Średnia kumulowana w księgowości? Sorry, w księgowości nie stosuje
się algorytmów poprawnych numerycznie, ba wręcz powiedziałby, że
dokładnie przeciwnie.
> Poza tym zaokraglen w systemie dziesietnym jest _cale mnostwo_ !
> Ktory jest zgodny z ustawa ?.
> Up, Down, Hal-Up, Half_Down, Ceil, Floor, czy tez Half-Even
> a moze jednak Half-Odd itp itd ?
Toż pisałem, że standardowy. Half-up.
> Te same zaokraglenia mozna zrealizowac rowniez na double.
Nie można, bo wyjdzie ci wynik "dokładniejszy", ale niezgodny z tym,
co ma wyjść księgowemu. Księgowemu 1.00/3 ma wyjść 33gr, a 33gr
pomnożone przez 300 ma mu wyjść 999zł, a nie 1000 zł. I nie ma to
nic wspólnego z poprawnością matematyczną.
> Nie przecze ze decimal jest tu gorszy ale sam z siebie _nieczego_
> nie zapewnia.
W abstrakcyjnych obliczeniach matematycznych.
>> Bynajmniej nie oznacza to, że będzie to wyniki całkowicie
>> poprawny z matematycznego punktu widzenia.
>
> Nieumiejetne stosowanie decimal jest nawet niekiedy
> _gorsze_ niz zastosowanie w to miejsce double.
No i? Co to zmienia w kwesti, że pieniadze należy księgować na decimalach.
>>> No wlasnie : jak jest zgodnie z ustawa ?
>>
>> Obecnie -- standardowo, zgodnie z systemem dziesiętnym.
>
> Nie masz pojecia o ustawie.
> (Ja juz tez,, bo juz zapomnialem :) - ale Ty napewno nawet jej nie
> widziales na oczy)
Jasne, a C++ to język niskiego poziomu.
Zamiast bredzić, to ty weź sobie zajrzyj np. do art. 63. Ordynacji Podatkowej
oraz rozporządzenia ministra finansów to tejże.
bart
--
"kiedy rozum śpi, włącza się automatyczna sekretarka"
http://candajon.azorragarse.info/ http://azorragarse.candajon.info/
Tak
AK
> Średnia kumulowana w księgowości? Sorry, w księgowości nie stosuje
> się algorytmów poprawnych numerycznie, ba wręcz powiedziałby, że
> dokładnie przeciwnie.
No co ty nie powiesz ? :)
PS: Srednia kumulowana w potocznym tego slowa znaczeniu
>> Poza tym zaokraglen w systemie dziesietnym jest _cale mnostwo_ !
>> Ktory jest zgodny z ustawa ?.
>> Up, Down, Hal-Up, Half_Down, Ceil, Floor, czy tez Half-Even
>> a moze jednak Half-Odd itp itd ?
>
> Toż pisałem, że standardowy. Half-up.
Gdzie ? Nie widze ?
A ja 'slyszalem' ze Half-Even Panie Kolego
W _bankowosci_ slyszalem.
>> Te same zaokraglenia mozna zrealizowac rowniez na double.
>
> Nie można,
[...]
Chopie.. mozna ba!
Nawet tak sie robilo gdy nie bylo/niemozna bylo uzyc decimali.
>> Nie przecze ze decimal jest tu gorszy ale sam z siebie _nieczego_
>> nie zapewnia.
>
> W abstrakcyjnych obliczeniach matematycznych.
Wlasnie _dokladnie_ w ksiegowosci.
To jeden z mitow ze decimal wsio rozwiazuje.
> No i? Co to zmienia w kwesti, że pieniadze należy księgować
> na decimalach.
Nie zawsze.
> Jasne, a C++ to język niskiego poziomu.
Dokladnie !
> Zamiast bredzić, to ty weź sobie zajrzyj np. do art.
> 63. Ordynacji Podatkowej oraz rozporządzenia ministra finansów to tejże.
Ja sie kieruje tym co widzialem (i dotknalem) kiedys w _bankowosci_.
AK
No i?
>>> Poza tym zaokraglen w systemie dziesietnym jest _cale mnostwo_ !
>>> Ktory jest zgodny z ustawa ?.
>>> Up, Down, Hal-Up, Half_Down, Ceil, Floor, czy tez Half-Even
>>> a moze jednak Half-Odd itp itd ?
>>
>> Toż pisałem, że standardowy. Half-up.
>
> Gdzie ? Nie widze ?
>
> A ja 'slyszalem' ze Half-Even Panie Kolego
> W _bankowosci_ slyszalem.
rozporządzenie MF nr SP1/694/8012-132/2334/05/AA
"W związku z uregulowaniami art. 14 § 1 pkt 1 ustawy z 29 sierpnia 1997 r.
- Ordynacja podatkowa (Dz.U. z 2005 r. Nr 8, poz. 60, z późn.zm.), sprawując
ogólny nadzór w sprawach podatkowych, uprzejmie informuję, co następuje.
Zgodnie z art. 63 ustawy ? Ordynacja podatkowa, w brzmieniu nadanym art. 1 pkt 30
ustawy z 30 czerwca 2005 r. o zmianie ustawy - Ordynacja podatkowa oraz
o zmianie niektórych innych ustaw (Dz.U. Nr 143, poz. 1199), podstawy opodatkowania,
kwoty podatków, odsetki za zwłokę, opłaty prolongacyjne, oprocentowanie nadpłat oraz
wynagrodzenia przysługujące płatnikom lub inkasentom zaokrągla się do pełnych
złotych w ten sposób, że końcówki kwot wynoszące mniej niż 50 groszy pomija się,
a końcówki kwot wynoszące 50 i więcej groszy podwyższa się do pełnych złotych.
Zaokrąglania podstaw opodatkowania i kwot podatków nie stosuje się do opłaty skarbowej
oraz opłat, o których mowa w przepisach o podatkach i opłatach lokalnych."
To standard, czyli half-up.
>>> Te same zaokraglenia mozna zrealizowac rowniez na double.
>>
>> Nie można,
> [...]
>
> Chopie.. mozna ba!
> Nawet tak sie robilo gdy nie bylo/niemozna bylo uzyc decimali.
Och? W jakim konkretnie banku, w systemach *transakcyjnych* liczono na double?
>>> Nie przecze ze decimal jest tu gorszy ale sam z siebie _nieczego_
>>> nie zapewnia.
>>
>> W abstrakcyjnych obliczeniach matematycznych.
>
> Wlasnie _dokladnie_ w ksiegowosci.
> To jeden z mitow ze decimal wsio rozwiazuje.
Rozwiązuje kwestię liczenia zgodnie z Ustawą.
>> No i? Co to zmienia w kwesti, że pieniadze należy księgować
>> na decimalach.
>
> Nie zawsze.
Zawsze.
>> Jasne, a C++ to język niskiego poziomu.
>
> Dokladnie !
No, w Klewkach wylądowało UFO.
>> Zamiast bredzić, to ty weź sobie zajrzyj np. do art.
>> 63. Ordynacji Podatkowej oraz rozporządzenia ministra finansów to tejże.
>
> Ja sie kieruje tym co widzialem (i dotknalem) kiedys w _bankowosci_.
Normalnie łał.
bart
--
"Nigdy nie popełniamy dwa razy tych samych błędów" (c)TP S.A. <0800221122,*,4>
http://candajon.azorragarse.info/ http://azorragarse.candajon.info/
Niech sobie Pan przeczyta jeszcze raz rzeczony atrykol tej
ustawy i _pomysli_ czego tenze punk tyczy :).
Prosze mi pokazac jedno slowo mowiace tam o obliczeniach
w systemach finansowych.
Poza tym wie Pan.. jesliby ten punkt zastosowac do tego czego
Pan chce (obliczen) to.. nastapila by 'renominacja' czyli
w systemach finansowych nie bylo by .. groszy w ogole :)
AK
> > potrafisz podać przykład?
>
> Tak
>
To podaj
Obawiam się, że nie ja Panie Karpierz.
> Niech sobie Pan przeczyta jeszcze raz rzeczony atrykol tej
> ustawy i _pomysli_ czego tenze punk tyczy :).
Obliczania podatków przez księgowość, Panie Karpierz.
> Prosze mi pokazac jedno slowo mowiace tam o obliczeniach
> w systemach finansowych.
Panie Karpierz, dyskutowanie o tych tematach z osobą która nie odróżnia
systemu finansowego od księgowego uważam za bezcelową.
Podobnie bezcelową uważam dyskusję z osobą, która o bankowości wie
tyle, ile "lizneła".
bart
--
"Apple: plucky outsiders, the eternal underdog, the place where
the success-phobic go to rage at the do-betters. " (c)Tom's Hardware
http://candajon.azorragarse.info/ http://azorragarse.candajon.info/
Nie poda, bo on ogólnie nie bardzo ma pojęcie o czym pisze.
bart
--
Hi! I'm a .signature virus! Copy me into your ~/.signature to help me spread!
http://candajon.azorragarse.info/ http://azorragarse.candajon.info/
Goście, plizzz
Z osobistymi wojenkami idźcie sobie na priva. Podejrzewam, że większość
czutających tę grupę nie ma czasu, ani ochoty na (kolejny w ostatnim
czasie) flame.
--
Pozdro... Tupteq
--
Pozdro... Tupteq
P.S. Dajcie se siana!
Chodzi o merytoryczna odpowiedz a nie wojne, jak ktos stawia jakas teze
to dobrze zeby umial ja potwierdzic.
Akurat to, jak działa typ Decimal w Pythonie, to jest jak najbardziej
zgodne z tematyką grupy. W szczególności to, że Decimal można ustalić
*dowolną* precyzję.
bart
--
"Friendship is neither inherited nor transitive." [Annotated C++ Ref. Manual]
http://candajon.azorragarse.info/ http://azorragarse.candajon.info/