moc pekne a pripomelo mi to nejakou sci-fi povidku, nazev nevim, ze nepratelska strana zrusila elektroniku a pocitalo se zase od ruky.
nedavno zemrela pani co pocitala v ruce trajektorie letu na mesic.
v takove situaci by vyhral stary strejda, ktery by mel schovane logaritmicke tabulky a nasobeni velkych cisel by byla prdel.
pojdme si vzpomenout na logaritmicke pravitko, napierovy kosticky :-)
lidicky, ja jsem si jeste hral s planimetrem :-)
http://kvaternion.fme.vutbr.cz/2018/kv18_1-2_marik_web.pdf
U mna mc je ale spravne (debian stable/testing/unstable):
$ bc bc 1.07.1 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. obase=16 ibase=16 1.0-0.1 1.0 1.00-0.10 .F0 1.00-0.10 .F0 $ dpkg -l |grep " bc " ii bc 1.07.1-2+b2 amd64 GNU bc arbitrary precision calculator language
Ano, bc vie prekvapit, ale pocita presne podla dokumentacie. :) Interne totiz reprezentuje cisla v desiatkovej sustave a pri vstupe ich skonvertuje podla ibase a oreze na rovnaky pocet desatinnych miest ako malo cislo na vstupe. Tym z .1(16) vzinkne .0(10). A s tou nulou potom pocita dalej. Ked sa mu zadaju 2 desatinne cisla, pocita uz o cosi presnejsie.
Odporucam precitat si manual k bc, hlavne o premennej scale. A nepouzivat bc na ziadne seriozne vypocty.
Jestli to používá dvojkový doplněk, chová se to „rozumně“ při overflow a mám bitovou negaci, tak udělám z toho druhého -číslo tím že přičtu FFFF a invertnu bity a pak to sečtu. Bez bitové negace mě nic nenapadá (kromě opakovaného přičítání FFFF až dojdu do nuly). A sám jsem tohle nikdy nedělal, jenom si matně pamatuju tyhle vlastnosti dvojkového doplňku ze školy.
Jedničkový doplněk menšitele - invertuješ všechny bity, potom z něj uděláš dvojkový doplněk přičtením jedničky a celé to přičteš k menšenci.
Stejně se počítalo na jednodušších mechanických počítačkách, které neměly odčítání. Tam se přičetl devítkový doplněk a jednička, která z něj udělala desítkový.
Pokud ti vyšlo záporné číslo se změtí devítek na začátku, tak jsi ho úplně stejným postupem odečetl od nuly, čímž ti vyšla jeho absolutní hodnota.
V nejhorsim (musim ale mit taky operaci porovnani):
odecitam a - b (predpokaldam ze a > b)
p1=b, p2=0
while p1 > a : p1++, p2++
return p2
Da se to asi zrychlit tak ze si pripravim mocniny dvojky a budu je zkouset pricitat od nejvetsi (tj. pro kazdy bit otestuju jestli ma ve vysledku byt nastaveny), ve stylu
p1=b, p2=0
...
if p1+256 <= a: p1+=256, p2+=256
if p1+128 <= a: p1+=128, p2+=128
...
if p1+1 <=a: p1+=1, p2+=1
return p2
A podobne se da udelat deleni kdyz znam jenom nasobeni (a scitani),
odmocnovani kdyz znam jenom umocnovani (a nasoveni a scitani)
i vsechny dalsi inverze sipkovych operatoru