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.
- 884 megtekintés
Hozzászólások
keress az informatika helyett mást ;)
de ha muszáj akkor swap(i,o)
- A hozzászóláshoz be kell jelentkezni
...? o_O Kifejtenéd, mert egy szót sem értek...
--
Azt akarom, hogy az emberek ne kényszerből tanuljanak, hanem azért, mert tudni akarnak.
- A hozzászóláshoz be kell jelentkezni
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...
- A hozzászóláshoz be kell jelentkezni
Ott a pont, viszont még mindig van, amit nem értek:
$ echo "A" | bc
10
$ echo "AA" | bc
99
--
Azt akarom, hogy az emberek ne kényszerből tanuljanak, hanem azért, mert tudni akarnak.
- A hozzászóláshoz be kell jelentkezni
echo "ibase=16; AA" | bc
170
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
10-es számrendszerben nincs értelme az 'A'-nak
ergo mindegy mit ír ki, hisz ilyet úgy sem kérdezel tőle
a bc nem matlab vagy excel
hanem egy egyszerű "szkript" ami a dc-t használja
- A hozzászóláshoz be kell jelentkezni
+1
Felesleges azzal foglalkozni hogy miért ilyen választ ad _nem értelmezhető_ bemenetre.
- A hozzászóláshoz be kell jelentkezni
dupla
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Nem is!
$ echo "AA p" | dc
110
(This version of bc was implemented from the POSIX P1003.2/D11 draft and contains several differences
and extensions relative to the draft and traditional implementations. It is not implemented in the
traditional way using dc(1).)
:P
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
$ echo "ibase=16; obase=10; FFFFFFFF * FFFFFFFF" | bc
FFFFFFFE00000001
- A hozzászóláshoz be kell jelentkezni