Forum » Programiranje » [Python] Deljenje stevila v obliko xE+y
[Python] Deljenje stevila v obliko xE+y

zdobersek ::
pri pythonu bi rad, da bi ob deljenju vecjih stevil kolicnik bil v taksni obliki, kot v tem primeru:
07991298112010972966613027763296844600307835334275
/ 256
= 3.121600825E+46
tako pa ob deljenju v pascalu kolicnik postane megalomanska stevilka, le malo manjsa po dolzini, kot original.
ko smo ze tu, pa bi se poprosil, ce bi mi lahko kdo razlozil, kako stevilo 3.121600825E+46 spremeniti nazaj v prvotno stevilo (snov srednje sole =?).
Hvala!
lp
07991298112010972966613027763296844600307835334275
/ 256
= 3.121600825E+46
tako pa ob deljenju v pascalu kolicnik postane megalomanska stevilka, le malo manjsa po dolzini, kot original.
ko smo ze tu, pa bi se poprosil, ce bi mi lahko kdo razlozil, kako stevilo 3.121600825E+46 spremeniti nazaj v prvotno stevilo (snov srednje sole =?).
Hvala!
lp

Quikee ::
ja... to pa je zato ker je število 7991298112010972966613027763296844600307835334275 deljivo z 256 in rezultat ni število tipa float ampak ga kar pusti v integer tipu. Če ročno spremeniš število v float [ float(7991298112010972966613027763296844600307835334275/256) ] boš dobil rezultat zapisan v željenem formatu.

zdobersek ::
po kmecki logiki bi stevilo, spremenjeno v float, lahko zlahka v prvotno obliko spravil nazaj, ce bi ga spremenil v integer. vendar ob vecjih stevilkah, okoli 310 dolzine, python na ta nacin stevil v prvotno stanje ne spremeni pravilno - uspesen je le do 16. stevke. pa me zanima, ali je to pac python, ali se da priti do natancnega prvotnega stevila?
Hvala!
Hvala!

Jean-Paul ::
Ne bo šlo. Decimalno število, predstavljeno s plavajočo vejico, ima pač omejeno natančnost. Če želiš računati s poljubno natančnostjo, si moraš takšno aritmetiko spisati sam oz. bolje - uporabiti ustrezno knjižnico (modul). V Pythonu imaš v ta namen na voljo dva tipa: long in Decimal
LP
LP

noraguta ::
za arbitrary numeriko na prvo žogo bi jaz predlagal scheme. v ostalem moraš pri drugih programskih jeikih iskati ustrezne knjižnice. po vecni pa niso lepo integrirane v programske jezike. sicer scheme prejudicira madžarsko notacijo aritmetičnega izraza ampak na hitro pogledano je zadeva sijajen kalkulator.
Pust' ot pobyedy k pobyedye vyedyot!

zdobersek ::
na python.org sem precesal vse, kar sem nasel o modulu Decimal, vendar nikjer nisem zasledil, kako bi lahko 9.97075E+305 spremenil v prvotno stevilo. nekaj sem poskusal z nastavljanjem preciznosti, vendar mi ni uspelo. se prijazno priporocam za razlago/namig.

Jean-Paul ::
Poglej, ko enkrat število pretvoriš v zapis s plavajočo vejico, prvotnega števila (v splošnem) ne moreš več dobiti nazaj. Zato je v tvojem primeru (če te prav razumem) bolje, da izračunaš rezultat s poljubno natančno aritmetiko in tega po potrebi pretvarjaš v float. Bo šlo?
LP
LP
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | float vs decimalOddelek: Programiranje | 6425 (4558) | Looooooka |
» | Linux 4.10 je tu (strani: 1 2 )Oddelek: Novice / Operacijski sistemi | 15241 (11970) | BigWhale |
» | [C] deljenjeOddelek: Programiranje | 1468 (1061) | joze67 |
» | IBM-ov Mira cilja na vrh lestvice Top500Oddelek: Novice / Znanost in tehnologija | 5663 (4356) | HairyFotr |
» | c++ preverjanje stevilOddelek: Programiranje | 1727 (1522) | ]Fusion[ |