bc furcsa eredményt ad

Fórumok

Előre érzem, hogy ez rövid életű topic lezs - ha így lenne, trey, kérlek töröld - de egy szorzást próbáltam elvégezni bc-vel, erre érdekes választ köpött:


$ echo "ibase=16; obase=16; FFFFFFFF * FFFFFFFF" | bc
02 21 04 21 15 01 00 00 15 10 08 19 06 04 09

A helyes eredmény (több kalkulátor ajánlásával) 0xFFFFFFFE00000001 lenne, de hogy a bc mit adott vissza, azt totál nem értem... o_O Bár gyanús, hogy kétjegyű csoportokba vannak rendezve, de nem értem, miért.

Megoldás


$ echo "obase=16; ibase=16; FFFFFFFF * FFFFFFFF" | bc

Ha az

ibase

van elől, az hatással van az

obase

-re is.

Hozzászólások

keress az informatika helyett mást ;)
de ha muszáj akkor swap(i,o)

az a probléma magja szerintem, hogyha beállítottad az ibase-t 16-os számrendszerre, akkor az már az obase értelmezésére is vonatkozik, tehát 22-es számrendszerben kérted az eredményt.
próbáld ki úgy, hogy az echo mögött az ibase és az obase sorrendjét felcseréled.

szerk: mire ellenőriztem, megelőztek...

Ezt tudom, csak azt nem értem, hogy ha ibase nélkül is tudja, hogy az 'A' 10-et jelent, akkor az 'AA' miért jelen 99-et, illetve hogy ha több betűt/számjegyet tartalmaz a bemenet, akkor a betűket miért veszi 9-nek?
--
Azt akarom, hogy az emberek ne kényszerből tanuljanak, hanem azért, mert tudni akarnak.

Jó, valamelyest igazad van, de azért valami hibakezelést belenyomhattak volna. Másfelől meg én n00b-kodok itt, mert ott van a manuálban is:


       Az egy   számjegyű  számoknak  mindig  a  számjegy  az  értéke,  az  ibase
       változótól függetlenül (pl.: A = 10). A több számjegyű számoknál  a  bc
       az  ibase-nél  nagyobb  számjegyeket  bc - 1-re cseréli. Ezáltal, a FFF
       mindig a lehetó legnagyobb háromjegyű számot jelenti.

--
Azt akarom, hogy az emberek ne kényszerből tanuljanak, hanem azért, mert tudni akarnak.

az "echo"-d irreleváns, attól hogy a dc-t használja nem kell definiálatlan bemenetere ugyanazt adni a mint a dc-nek

az pedig hogy konkrétan nem a dc-t használja, hmm, kicsit hibásan fogalmaztam, arra céloztam hogy ez nem egy bolond biztos számológép :)
apple appstoreos terméktől el lehet várni hogy hasznut nélkül használjuk, de nehogy már lassan egy c-compilernek is ilyennek kelljen lennie


$ echo "ibase=16; obase=10; FFFFFFFF * FFFFFFFF" | bc
FFFFFFFE00000001