Reicht es nicht, wenn du das Tan-Ergebnis auf größer 1 und kleiner minus 1 prüfst?
Warum sollte tan(60°) = sqrt(3) = 1.732... ungültig sein?
Stimmt, ich hätte nicht nur mit den paar Werten mit vielfachen von 45 testen sollen.
Delphi-Quellcode:
program Project3;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, System.Math,
Types;
procedure Main;
var
I: Integer;
Degree,
Rad, TanResult: Single;
LogMsg:
string;
DegArray: TArray<Integer>;
begin
for I := 0
to 360
do
begin
Degree := I;
Rad := DegToRad(Degree);
TanResult := Tan(
Rad);
if InRange(TanResult, -1000, 1000)
then
begin
LogMsg := Format('
Grad: %3.d - Rad: %2.4f - Tan: %2.4f', [I,
Rad, TanResult]);
end
else
LogMsg := Format('
Ungültige Eingabe für Tan(%3.d) - Rad: %2.4f - Tan: %2.4f', [I,
Rad, TanResult]) ;
Writeln(LogMsg);
end;
end;
begin
try
Main;
Readln
except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
end;
end.
Die Grenze mit 1000 ist natürlich willkürlich. Muss man je nach gewünschter Genauigkeit anpassen.
Der Windows-Taschenrechner liefert bspw. für tan(90.001°) = -57295,7795...