BC špatně počítá?

BC špatně počítá?
« kdy: 15. 01. 2011, 20:44:55 »
Ahoj,
snažím se zjistit, zda je v BC chyba ve výpočtu, nebo je chyba mezi klávesnicí a židlí.
Mám číslo v double IEEE 754: např. pi 3.1415926 -> uloženo jako 400921FB4D12D84A
po převodu by mělo být:
   exponent: 2^1 (400)
   a mantisa 1.5707963000000000 (1+.921FB4D12D84A)
kontrola např.: http://babbage.cs.qc.edu/IEEE-754/64bit.html

jenže když pomocí bc zkusím převod:
   echo 'ibase=F;obase=2;1.921FB4D12D84A' | bc
   tak vychází:
   1.10011100000001101010100101000011110100010101
   mělo by ale správně vycházet:
   1.1001001000011111101101001101000100101101100001001010
   tedy od 5. bitu špatně! (to je sakra velká nepřesnost)

  navíc zpětný převod ukazuje, že to nesedí:
    echo 'ibase=F;obase=2;.921FB4D12D84A' | bc
    echo 'ibase=2;obase=F;.10011100000001101010100101000011110100010101' | bc
    =.921EB4D12D7B780E538108E815B38920E69E42
    tedy od EB...

je chyba u mě, že dělám něco blbě, nebo programátoři bc nezvládli převod do zlomkové části?




.

Re: BC špatně počítá?
« Odpověď #1 kdy: 15. 01. 2011, 21:15:52 »
Hned prvni non-bug je tvuj pripad.

http://gcc.gnu.org/bugs/#nonbugs

x22

Re: BC špatně počítá?
« Odpověď #2 kdy: 16. 01. 2011, 00:22:15 »
F je 15, nema tam byt ibase=G (alebo ibase=16) namiesto ibase=F?

prvak

Re: BC špatně počítá?
« Odpověď #3 kdy: 16. 01. 2011, 13:25:46 »
Re Hostovi: man bc tvrdi, ze je to "a language that supports arbitrary precision numbers ...", necekal bych ze by byl interne pouzity omezeny datovy typ.

Re: BC špatně počítá?
« Odpověď #4 kdy: 16. 01. 2011, 13:59:19 »
2host
taky se mi to nezdá, protože kdyby byl v bc použit výpočet založený na double (i single) tak by chyba nebyla na 5. pozici, ale až někde na 13+. Navíc si myslím, že v bc mají vlastní algoritmus - mám totiž za to, že si lze předepsat přesnost třea na 1000 míst (teď už si nepamatuji jak se to dělalo)


Luinar

Re: BC špatně počítá?
« Odpověď #5 kdy: 16. 01. 2011, 16:45:35 »
Zkus
Kód: [Vybrat]
echo 'ibase=16;obase=2;.921FB4D12D84A' | bc
Luinar

Re: BC špatně počítá?
« Odpověď #6 kdy: 16. 01. 2011, 17:35:12 »
dík, to je ono. Já bych se....a to jsem si jistý, že jsem to zkoušel

navíc koukám, že záleží na pořadí:
echo 'ibase=2;obase=16;1.10010010000111111011010011010001001011011000' | bc
dělá něco jiného než
echo 'obase=16;ibase=2;1.10010010000111111011010011010001001011011000' | bc

holt pořád mě bc překvapuje

dodatek:
je to vlastně také správně, protože ibase předepisuje formát i pro obase , které je uvedeno až za ním...
neznám lepší kalkulačku...
« Poslední změna: 17. 01. 2011, 10:52:43 od Xjmeno363 »

Slovo

Re: BC špatně počítá?
« Odpověď #7 kdy: 16. 01. 2011, 18:12:19 »
Ja bych spis doporucoval calc nebo GMP.

Re: BC špatně počítá?
« Odpověď #8 kdy: 16. 01. 2011, 19:54:55 »
a umí některých z nich převádět desetinná čísla mezi soustavami? To je pro většinu SW problém na kterém si vylámou zuby. viz:
-0.3AB112e-FB -> Dec. apod.

nou

Re: BC špatně počítá?
« Odpověď #9 kdy: 16. 01. 2011, 20:45:36 »
GMP myslim vie kazdu sustavu od dvojkovej po 63

Re: BC špatně počítá?
« Odpověď #10 kdy: 16. 01. 2011, 22:07:56 »
echo 'ibase=2;obase=10;11'| bc
11

echo 'ibase=2;obase=1010;11'| bc
3

Sranda :)

Kit

Re: BC špatně počítá?
« Odpověď #11 kdy: 17. 01. 2011, 10:26:47 »
echo 'ibase=2;obase=10;11'| bc
11

echo 'ibase=2;obase=1010;11'| bc
3

Sranda :)

Však je to dobře. ibase=2;obase=10 znamená, že vstupní soustava je dvojková, výstupní také dvojková. Tedy 11 je opět 11.

ibase=2;obase=1010 znamená, že vstupní je dvojková, výstupní desítková. Tedy 11 se převede na 3.