Wie rechnet der Taschenrechner Sinus und Cosinus aus?
Hey :) Ich wollte mal Fragen, wie ein Taschenrechner den Sinus bzw. den Cosinus ausrechnen kann. Als der Taschenrechner programmiert wurde, musste doch irgendeine Formel oder ähnliches in den Taschenrechner eingegeben worden sein, damit er weiß, wie er rechnen soll. Und könnte man nicht theoretisch mit der Formel bzw. mit dem Weg, den der Taschenrechner nimmt, den Sinus bzw. Cosinus auch schriftlich ausrechnen ?!? MfG
9 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 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
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...
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
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)
Zur näherungsweisen Berechnung der Sinus-Funktion (und damit auch von Cosinus und Tangens) gibt es eine Taylorreihe:
sin(x) = x / 1! - x³ / 3! + x^5 / 5! - x^7 / 7! + x^9 / 9! ...
Die genaue Herleitung dieser Taylorreihe wird hier erklärt: http://matheguru.com/ana lysis/88-taylorreihe.html (bitte den Link zusammenfügen, GF.net denkt wohl, Ana l ysis wäre Schweinkram facepalm)
Als Beispiel die Berechnung von sin (0,5)
sin (0,5) = 0,5 / 1! - 0,5^3 / 3! + 0,5^5 / 5! - 0,5^7 / 7!
Ich breche hier nach dem vierten Term ab, da die Genauigkeit ausreicht.
sin (0,5) = 0,5/1 - 0,125/6 + 0,03125/120 - 0,0078125/5040
sin (0,5) = 0,5 - 0,208333... + 0,00026041666... - 0,00000155009920... = ~ 0,479425533...
Zum Vergleich der "korrekte" Wert: 0,47942553860420...
Wie Du siehst, beträgt der Unterschied schon nach dem 4. Term nur noch ca. 5 * 10^-9.
Ein Taschenrechner rechnet noch 1-2 Schritte weiter, dann ist auch seine mögliche Genauigkeit (sprich Anzahl der Nachkommastellen) erreicht.
Vielleicht hättest Du noch erwähnen sollen, dass die Taylorreihe für Winkel im Bogenmaß (Radiant) gilt - Winkel in Grad (°) muss man erst noch entsprechend umrechnen.
OK, das hatte ich jetzt eigentlich vorausgesetzt.
Taylorreihen sind Stoff für Kollegstufe bzw. Uni - da sollte man eigentlich schon lange von Grad auf Bogenmaß umgestiegen sein (wimre steht das in den meisten Lehrplänen spätestens in der 10. Klasse)
Naja, aber im "Alltagsgebrauch" wissen die meisten Mensch nicht mal, dass man Winkel auch noch anders als in Grad messen kann.
Wenn ich mich an meine Schulzeit und mein Referendariat richtig erinnere, sind mir da Radiant (oder gar Gon) nur am Rande begegnet, das mag aber in den Bundesländern verschieden sein. Aber selbst im Studium (Mathe und Bautechnik) wurden Winkel in den meisten Verabstaltungen in Grad angegeben, außer eben in der AnaIysis.
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.
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 ;-)
Na dann freut dich vielleicht auch dieses Foto:
https://www.dropbox.com/s/8qh07689r3j2jyj/2015-02-11%2021.44.52.jpg?dl=0
(Ja, das Ding liegt wirklich auf meinem Schreibtisch. Funktioniert immer, ohne Batterien, Strom oder Sonne ;-)
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:
(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...