2016-11-06 2 views
0

In Eiffel definiert die Klasse DOUBLE_MATH trigonometrische Funktionen. Als ich die Schnittstelle dieser Klasse sehen, wie here gezeigt, heißt esWas ist die Domäne der trigonometrischen Funktionen in Eiffel? Ist es [-pi/4, + pi/4]?

Cosinus (v: REAL_64): REAL_64 - trigonometrische Kosinus von Radianten `v‘ angenähert - im Bereich [-pi/4 , + pi/4]

und

sine (v: REAL_64): REAL_64 - trigonometrischer Sinus radian `v‘ approximiert - im Bereich [-pi/4, + pi/4]

und

Tangens (v: REAL_64): REAL_64 - trigonometrische Tangente des radian `v‘ approximiert - im Bereich [-pi/4, + pi/4]

Es scheint, zu behaupten, dass die trigonometrischen Funktionen nur in der Domäne arbeiten [-pi/4, + pi/4]. Als ich jedoch versuchte, sie für andere Werte zu verwenden, schienen sie zu funktionieren.

Ich bin besorgt, dass es gelegentlich scheitern könnte, oder dass der Erfolg, den ich sah, in der Tat ist eine Form von undefinierten Verhalten, das sich nicht darauf verlassen kann.

Ist es sicher, die Funktionen außerhalb der angegebenen Domäne zu verwenden? Wenn ja, warum wird diese Domain angegeben? Wenn nicht, warum wird es so gemacht, dass die Funktionen nur in diesem Bereich funktionieren?

+0

Beachten Sie, dass die Dokumentation der Arcus-Funktionen einfach falsch ist, sind die Argumente nicht in Radianten, sondern nur Zahlen, und der gegebene Bereich ist nicht die Domäne = „Reihe von Argumenten“ wie bei den anderen Funktionen, aber der Bereich (Werte) der Funktion. Und selbst das scheitert beim "arc_tangent". – LutzL

+0

@LutzL Oh ja, das hatte ich nicht bemerkt. Also sagst du, dass sie nicht zuverlässig sind? – GoodDeeds

+0

Ich denke, dass Sie die Funktionen ohne Einschränkung verwenden können. Garantien für die Genauigkeit gelten jedoch nur für die kleinen Argumente. – LutzL

Antwort

2

Die Funktionen werden als Umhüllungen der entsprechenden Funktionen aus C math.h implementiert. Da Eiffel für praktisch jede Plattform mit einem C-Compiler kompiliert werden kann, sorgt der Kommentar dafür, dass die Domäne auf die restriktivsten Domänen von C-Compiler-Implementierungen beschränkt wird. Einige CPUs bieten direkte Unterstützung für trigonometrische Funktionen, aber ihre Genauigkeit verringert sich, wenn der Eingabewert außerhalb eines bestimmten Bereichs liegt.

Um zusammenzufassen, müssen Sie das Handbuch des C-Compilers für die Plattformen, die Sie für die spezifischen Bereiche der trigonometrischen Funktionen verwenden werden, überprüfen, oder stellen Sie alternativ sicher, dass der Eingabewert in dem Bereich wie angegeben ist Kommentar.

+0

Vielen Dank für Ihre Antwort. – GoodDeeds

Verwandte Themen