Hvordan regner en lommeregner?

Dette interessante spørgsmål har mange sikkert stillet sig selv. Spørger man lommeregnerfabrikanterne: Texas Instruments, Casio, Hewlett Packard ... får man sandsynligvis ikke megen respons. Da jeg selv skrev til Texas Instruments var de dog så elskværdige overhovedet at svare mig, men svaret var altså: "Oplysninger af den slags, som de har bedt om, udleverer Texas Instruments ikke. Firmaet vurderer, at det hører ind under fabrikshemmeligheder og udleveres derfor ikke af sikkerhedsmæssige årsager. Tak for Deres henvendelse, Vi håber, at Texas Instruments en anden gang kan være behjælpelig med oplysninger".

Heldigvis løftede Hewlett Packard (HP) alligevel lidt af sløret for emnet i en række artikler i deres lokale Hewlett Packard Journal i 70'erne. Der var blandt andet tale om følgende fire artikler:

  1. Personal Calculator Algorithms I: Square Roots (maj 1977)

  2. Personal Calculator Algorithms II: Trigonometric Functions (juni 1977)

  3. Personal Calculator Algorithms III: Inverse Trigonometric Functions (nov.1977)

  4. Personal Calculator Algorithms IV:Logarithmic Functions (april 1978)

I en tidligere artikel af David S. Cochran fra 1972 fortælles det, at man under udviklingen af HP-35 spekulerede meget over hvilke algoritmer man skulle gøre brug af. Man overvejede potensrækker, polynomieudviklinger, kædebrøker og Chebyshev polynomier. Alle viste sig dog at være for langsomme på grund af antallet af multiplikationer og divisioner. Det viste sig, at den bedst egnede algoritme til HP-35 var én, som bygger på en idé beskrevet af Henry Briggs i "Arithmetica Logarithmica" og senere er behandlet i artikler af Volder (sept. 1959) og Meggitt (april 1962).

Algoritmerne skulle naturligvis afpasses med arkitekturen af de integrerede kredse. Med en BCD-processor (binary-coded decimal) kunne man med de omtalte algoritmer nå ned på beregningstider på under 1 sekund for alle de matematiske funktioner. Metodens styrke lå i, at man fik begrænset antallet af multiplikationer, som normalt tager meget længere tid at udføre end tilsvarende additioner og subtraktioner.



SA-tal

Multiplikation med visse tal er dog særligt nemt at udføre. Ganger man for eksempel et tal, for eksempel 28,317, med 1,01, så kan regnestykket klares med et skift og en addition. Med skift menes en kommaflytning.

Det nederste eksempel viser tilsvarende, hvor nemt det er at gange med 0,999. Alle disse nemme multiplikatorer vil vi kalde SA-tal (S for Skift, A for Addition). Der er tale om: 2; 1,1; 1,01; 1,001; 1,0001; . . . . samt 0,9; 0,99; 0,999; . . .



En algoritme for logaritmefunktionen

Henry Briggs gyldne idé for mere end 300 år siden bestod i at tage det tal, som han ønskede at bestemme logaritmen til, og foretage nogle operationer herpå indtil han kom til et andet tal tæt på 1, for hvilket han nemt kunne bestemme logaritmen. Udfra kendskabet til operationerne kunne han via regnereglerne for logaritmefunktionen regne baglæns og få logaritmen til det oprindelige tal.

Men hvorfor er det nemmere at bestemme logaritmen til et tal tæt på 1? Briggs opdagede, at når x er tæt på 1, så er logaritmen til x omtrent lig med k = 0,4342944... multipliceret med x -1. I moderne terminologi kan det bedst udtrykkes ved, at det approksimerende 1. gradspolynomium til log(x) i punktet 1 er lig med k · (x -1).

For os vil det være mere hensigtsmæssigt at bruge den naturlige logaritme, da vi så slipper for konstanten k ovenfor: Det approksimerende 1. gradspolynomium til ln(x) i punktet 1 er lig med (x -1). Grafisk er det illustreret på figuren nedenfor, hvor man ser, at tangenten til grafen for ln(x) i punktet 1 stemmer fint overens med funktionen i nærheden af dette punkt.





Som bekendt er alle logaritmer proportionale. Sammenhængen mellem den naturlige logaritme og titalslogaritmen er: log(x) = ln(x)/ln(10) = (0,4342945...) · ln(x).

Mens Briggs' operationer var kvadratrodsuddragninger, så var idéen i algoritmen til HP-35 at bruge SA-operationer, dvs. at multiplicere med SA-tal. Det vil være nemmest at demonstrere idéen via et eksempel:





Opgave: Bestem log(370,45) med 5 decimaler.


Løsning: Flyt kommaet, så argumentet tilhører det lukkede interval fra 0,1 til 1: 0,37045. Multiplicér herefter med SA-tal: 2; 1,1; 1,01; 1,001; ... Man starter fra venstre, dvs ganger med k1 = 2. Det giver 0,74090. En yderligere multiplikation med 2 giver et tal, som er større end 1. Det droppes derfor. I stedet ganger man med næste SA-tal, k2 = 1,1 og får 0,81499. Man kan gange med 1,1 yderligere to gange, før man får et tal, som er større end 1. Derefter fortsættes med k3 = 1,01 osv. Når tallet er tilstrækkeligt tæt på 1, standser man.



ln(ki) Multiplikand ki (SA-tal) Produkt
0,37045
0,6931472 k1 = 2 0,74090
0,0953102 k2 = 1,1 0,81499
. . . . . . . . . k2 = 1,1 0,896489
. . . . . . . . . k2 = 1,1 0,9861379
0,0099503 k3 = 1,01 0,9959992
0,0009995 k4 = 1,001 0,9969951
. . . . . . . . . k4 = 1,001 0,9979920


I dette tilfælde er x = 0,997992 tæt nok på 1. Derfor kan ln(x) tilnærmes med x -1. Nedenstående regning viser, hvordan man "kommer tilbage til" logaritmen til det oprindelige tal.



For at få titalslogaritmen til 370,45 foretages følgende regninger:



Vi har overfor antaget, at lommeregneren regner med 7 cifre. Afrundet til 5 decimaler er resultatet 2,56873, hvilket er fuldt ud korrekt.

 

Litteratur

Poul Wulff Pedersen. Approksimation. Akademisk forlag, 1979.
(En fin lille bog, som også kan benyttes i gymnasiet)




Regneredskaber

En helt fantastisk hjemmeside om gamle regneredskaber: Gamle lommeregnere, regnestokke, gamle additionsmaskiner, planimetre m.m. kan ses på hp-museum.