» »

[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

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!

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

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!

Jean-Paul ::

noraguta, verjetno si imel v mislih (inverzno) poljsko notacijo ( klik, klak)

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


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

float vs decimal

Oddelek: Programiranje
365955 (4088) Looooooka
»

Linux 4.10 je tu (strani: 1 2 )

Oddelek: Novice / Operacijski sistemi
5413727 (10456) BigWhale
»

[C] deljenje

Oddelek: Programiranje
181354 (947) joze67
»

IBM-ov Mira cilja na vrh lestvice Top500

Oddelek: Novice / Znanost in tehnologija
275230 (3923) HairyFotr
»

c++ preverjanje stevil

Oddelek: Programiranje
111571 (1366) ]Fusion[

Več podobnih tem