Wie rechnet der Taschenrechner Sinus und Kosinus aus?

8 Antworten

Die ersten Computer haben tatsächlich die trigonometrischen Funktionen über z.B. Taylorreihen berechnet. Da aber kleine Rechner mit einfachem Aufbau (z.B. für das Militär) gefordert waren, hat man neue, einfachere, schnellere Berechnungsverfahren in den 1960er Jahren entwickelt. Zum Beispiel Cordic (Pseudomultiplikation, -Division), da kommt der Rechner nur mit Additionen, Subtraktionen und Verschieben der Zahlen aus. Auch die ersten wissenschaftlichen Taschenrechner wie der HP-35 von Hewlet-Packard (1969) haben mit Cordic gerechnet, weil für diesem Algorithmus nur ein einfacher Chipaufbau nötig war. Sei den späten 1980er Jahren gibt es aber weiterentwickelte Chips, die auch dividieren und multiplizieren und kleine Tabellen speichern können. Von daher ist es möglich, das heutige Taschenrechner wieder mit Taylorreihen, Kettenbrüchen, etc. arbeiten. Es sind übrigens nicht alle Taylorreihen geeignet (ich habe etliche Reihen mit einem Tabellenkalkulationsprogramm simuliert): Die Taylor-Sinus- und Cosinusreihe genau bis knapp 180 Grad, auch mit wenigen Gliedern. Alle anderen Reihen, auch die Arcus-Reihen werden immer ungenauer, um so näher man 90 Grad (in Rad) kommt. Man kann aber den Tangens z.B. über sin/cos berechnen, die Arcusfunktionen über den Arcustangens, wenn man den Wert mehrfach halbiert (siehe trig.- Formelsammlung Wikipedia) und nach der Berechnung durch die Taylorreihe (oder dem Kettenbruch) wieder vervielfacht. Und arctan kann man leicht in arcsin, arccos umrechnen. Es ist also möglich, mit z.B. der Sinus-Reihe und dem Arcustangens alle Winkelfunktionen zu berechnen. Den Logarithmus (und e hoch x) bekommt man übrigens über die Taylorreihen auch recht gut berechnet. Es hat mal jemand in einem Forum berichtet, dass er verschiedene Firmen angeschrieben hat, die Taschenrechner herstellen. Er wollte wissen, wie die Rechner intern arbeiten. Die Firmen haben auf das Betriebsgeheimnis hingewiesen und haben nicht verraten, wie ihre TR rechnen...

Gruß- Jxxx

Es gibt sicherlich seit weit über 100 Jahren Tabellen zum heraus lesen. Wir hatten keinen Rechner und haben die Tabellen genutzt. Für Zwischenwerte mussten wir Interpolieren. Die Tabelle ist im Rechner!

Eine auch nur halbwegs genaue Tabelle würde viel Speicherplatz benötigen - das wäre zwar heute kein großes Problem mehr, ältere Taschenrechnern hätten diesen Platz aber nicht gehabt.

Und das "Heraussuchen" des Wertes aus der Tabelle würde fast genau so viel Rechenzeit benötigen wie die Berechnung über die (Näherungs-)Formel (s. Antwort von clemensw). Nach der gleichen Formel haben übrigens die "alten Mathematiker" in mühsamer "Handarbeit" die Werte für die Tabellen ausgerechnet.

Freut mich aber, dass es noch Leute gibt, die mit solchen Tabellenwerken noch umgehen können ;-)

1

Es gibt 3 Algorithmen, wie Rechner sin berechnen: Die guten, die mindestens 30 Stellen exakt berechnen:
§1) Taylor-Reihe:
sin(x) = x / 1! - x³ / 3! + x^5 / 5!... bis Genauigkeit erreicht
§2) hypergeometrische Funktion für x < 1 (z.B. Umkehrfunktionen Rechner):
sin(x)=x * hyg0F1(3/2, -x²/4)
cos(x)=hyg0F1(1/2, -x²/4)
Wobei hypergeometrische Funktionen auch wieder Summen aus Pochhammersymbolen sind, die bei genügend hoher Genauigkeit abbrechen.

§3) Über 99% aller Taschenrechner und die CPU die in Deinem PC den Befehl FSIN bereitstellt, sind jedoch auf "schnell und billig" optimiert und nutzen numerische Näherungsverfahren (beispielsweise Horner-Schema und CORDIC).
Siehe auch Buch "Arithmetische Algorithmen der Mikrorechentechnik".
Bei Wikipedia findet man eine Tabelle unter Numerische Genauigkeit von sin(22), wo man die große Ungenauigkeit dieser Billig-Rechner bestaunen kann:
Texas Instruments TI-25, TI-30-SLX, Schul-Rechner 1 nur 4 richtige Nachkommastellen!!!!

Selbst ASM-Befehl FSIN in CPU/FPU, der intern eigentlich 80Bit = 19 Stellen bereitstellt, wird bei Argumenten oberhalb 10^10=1e10 sehr ungenau:
http://www.gerdlamprecht.de/GrobeFPU_Fehler.htm
Viele Browser nutzen daher Software-Emulation...

Für cos nimmt man die Umrechnungsformeln, da es nur eine "verschobene! sin -Funktion ist:
cos(x)=sin(x+pi/2)=sin(pi/2-x)=1-2sin(x/2)²
cos(x)=sqrt(1-sin(x)²) wenn -Pi/2 <= x <= Pi/2

Ganz am Ende kommt bei Bedarf die Umrechnung in veraltete Einheit Grad:
Pi [rad] = 180 [°]
Faktor: 180/Pi

Und zum selber nachrechnen gibt es den Iterationsrechner:

http://www.gerdlamprecht.de/Roemisch_JAVA.htm##@Na=3;@B0]=0;b=aPI/180;d=@B0]=0;//a%20in%20%C2%B0%20b%20in%20rad@Nc=i+i+1;c=(((i%20%25%202)%3E0)?-1:1)@Pb,c)/Fak(c);d+=c;@Bi+1]=d;@N@Ac)%3C1e-15@N0@N1@N@C1]=sin(b);@C0]=bigc(15,bigc(3,GetKoDezi(3881,0,77),'15'),'42');
(LINK endet mit ); und beinhaltet den Code für mehrere Wege)

Da hier immer abgeschnitten wird, die Übergabeparameter als Code:

##@Na=3;@B0]=0;b=a*PI/180;d=@B0]=0;//a%20in%20%C2%B0%20b%20in%20rad@Nc=i+i+1;c=(((i%20%25%202)%3E0)?-1:1)*@Pb,c)/Fak(c);d+=c;@Bi+1]=d;@N@Ac)%3C1e-15@N0@N1@N@C1]=sin(b);@C0]=bigc(15,bigc(3,GetKoDezi(3881,0,77),'15'),'42');

(die man auch aus Tabelle oder bei IE auch aus Zwischenablage importieren kann)

In 5 Schritten ist volle Genauigkeit für a=3° erreicht:
i aB[i]
0 0
1 0.05235987755982988
2 0.05233595296362595
3 0.05233595624315789
4 0.05233595624294382
5 0.05233595624294383

aC[0] = 0.0523359562429438327221186296090784187310182539401649... mehr stellen...

1
@hypergerd

Die Darstellung ist aber für den Laien zu kompliziert!! Geht die Erklärung der Berechnung nicht auch etwas "populär-wissenschaftlicher"? Nicht jeder ist studierter Mathematiker oder Programmierer...

0
@Vargonautas

Da im LINK 2 * ("Multiplikation") Zeichen verschluckt wurden, hier noch einmal die Rechnung für alle mit der Wissensgrenze "Grundrechenarten":

gegeben Winkel: a=3° 

 b=a*PI/180 = 0.05235987755982988 (Winkel in SI-Einheit rad) aB[0]=0 (Summe startet bei 0 in Zeile [0])

i=Zeile= Index des Feldes aB beginnt bei 0 

c=2*i+1; Vorzeichen Wechselt bei jeder Zeile: 

aB[1]=aB[0]+b^1/c!= 0 + b /1 = b = 0.05235987755982988 aB[2]=aB[1]-b^3/3!

=0.05235987755982988-0.05235987755982988³/(1*2*3)

=0.05235987755982988-0.00002392459620393504

=0.05233595296362595...

aB[3]=aB[2]+b^5/5!

=0.05233595296362595+0.05235987755982988^5/(1*2*3*4*5) =0.05233595296362595+3.2795319442867085e-9

=0.05233595624315789...

aB[4]=0.05233595624315789-2.140719769235796e-13

=0.05233595624294382...also schon 16 richtige Nachkommastellen

=0.0523359562429438327221186296... genau

1
@hypergerd

cos(x)=sqrt(1-sin(x)²)  im Bereich  -Pi/2 <= x <= Pi/2  

cos(3°)=cos(Pi/60)=Wurzel(1-0.05233595624294382²)

=0.9986295347545738745... 17 richtige Nachkommas'

=0.998629534754573873784492... genau  

Für Werte größer Pi/2 nimmt man die Halbierungsformeln:  

http://www.gerdlamprecht.de/sin(x)ExactTrigonometricConstants.htm  

z.B.: 

  sin(x)=3*sin(x/3)-4*sin(x/3)³

Beispiel:

sin(4 rad) = 3*sin(4/3)-4*sin(4/3)³  

mit sin(4/3)=0.971937901363312776... 

also 3*0.971937901363312776-4*0.971937901363312776³

=-0.756802495307928248...

=-0.7568024953079282513726... (genau)  

1

Bei einem Taschenrechner sollte schon angegeben sein, wie viele Nachkommastellen exakt sind. Hypergerd hat einiges hierzu bemerkt.

Aufgrund der binären Zahlendarstellung gewinnt man spezielle Funktionen, die auf dem Bereich [-1,+1] definiert sind. Diese Funktionen sind für einen Rechner einfacher handhabbar als die "globalen" Näherungsformeln mittels Taylor-Reihen. Wenn diese Funktionen einmal codiert sind, werden sie sicherlich immer wieder verwendet. Den Namen dieser Funktionen ( aus den 60-er Jahren) habe ich vergessen und die zugehörigen Bücher beim letzten Umzug leider in den Müll entsorgen müssen. Der Autor hiess vielleicht Ralph.

Wilfson-Ralf. Den Titel habe ich vergessen. Irgend was mit compute

0

der Taschenrechner macht nichts anderes als den schriftlichen weg zu rechnen, nur bebebn viel schneller

Und was ist deiner Meinung nach der schriftliche Weg, um beispielsweise sin(8,7513) zu berechnen?

1
@DasFlaggschiff

Würde ich auch gerne wissen :D Weil es MUSS ja schriftlich irgendwie gehen

0
@DasFlaggschiff

Hallo,

einfach die Sinus-Taylorreihe (siehe "Formelsammlung Trigonometrie" oder "Sinus- und Cosinus- Taylormotivation" bei Wikipedia) ausprobieren oder den Kettenbruch, den es für den Sinus gibt. Einfach mal danach googeln und Reihe oder Kettenbruch bei Exel simulieren. Ist echt nicht schwer! Es reichen schon ca. 8 Glieder der Reihe, um bei z.B. 89,9 Grad eine 11stellige Nachkommagenauigkeit zu erreichen.

0

Was möchtest Du wissen?