Forum: Algorithmen, Datenstrukturen und Klassendesign
by gammatester,
21. Nov 2017
MM ist diese epsilon Sache meist falsch bzw unnötig. Für kleine x ist tan(x) ~ x und 0 ist nun mal das einzige Vielfache von 45 nahe 0, also kein Problem.
Zu Epsilon bzw zur Math-Funktion iszero. Ebenson wie tan(x) ~ x gilt zB sinh(x) ~ x und arcsinh(x) ~ x, aber was liefert Delphi: Für Delphi 6 ist wenigsten der sinh-Wert korrektsinh(1e-20) = 1e-20
arcsinh(1e-20) = 0Ab Delphi 7 siehts dann...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by gammatester,
21. Nov 2017
Hier eine vereinfachte Implementation meiner DAMath-Funktion komplett mit Test-Programm
{Test/dev program for tand (c) W.Ehrhardt 2017}
program t_tand;
{$apptype console}
uses
math;
Forum: Algorithmen, Datenstrukturen und Klassendesign
by gammatester,
20. Nov 2017
Richtig, aber so sollte eine tand(x) Funktion mit Argumenten in ° ja auch nicht programmiert werden (tand ist eine de-facto Standardbezeichnung, sie zB Matlab, Scilab, Octave oder GNU Fortran.
Zuerst wird x modulo 360 reduziert, dann werden exakte Werte 0,+1,Inf,-1 je nach Vielfachen von 45 zurückgeliefert, der Rest (bei geschickter Reduktion ist der im Bereich -45 < x < 45) wird halt mit...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by gammatester,
20. Nov 2017
Ja, und wenn Du Fragen hast, stehe ich selbstverständlich zur Verfügung. Bei den trigonometrischen extended Funktionen kommt erschwerend hinzu, daß ein viel größerer Bereich bis 2^16384 behandelt werden muss und die Reduktion mod 2*Pi entsprechend aufwendig ist. Für Vergleiche siehe die Datei t_amathx.cmp im Archiv http://www.wolfgang-ehrhardt.de/amath_2017-11-02.zip.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by gammatester,
20. Nov 2017
Lies noch einmal genau nach! Ich habe beschrieben:
Und wenn tan(89.95°)=Nan oder Inf oder was auch immer Du als ungültig wählst, kein Bug wäre, was ist dann noch ein Bug?
Das ist doch Unsinn, selbstverständlich kann 90 exakt als Double/Single darstellen, und man braucht auch keine 'unendlich breite' Register, um korrekt gerundete Werte für sin, tan etc auszurechnen. Man muß es nur wollen!...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by gammatester,
20. Nov 2017
Das mit nachträglichen Korrektur ist doch Bastelei, und jemandem, dem es auf Genauigkeit ankommt, unwürdig. Selbst bei einem Bereich von -1000..1000 wäre dann tan(89.95°) ungültig. Und ich würde mit Recht darauf hinweisen, daß das ein Bug ist.
Wie gesagt, die Gleitkomma-Arithmetik ist exakt, genau so exakt wie Integer-Arithmetik. Sorgen mach mir der schlampige Umgang von EMBA z.B. mit der...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by gammatester,
20. Nov 2017
Warum sollte tan(60°) = sqrt(3) = 1.732... ungültig sein?