Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Sinus Funktion spinnt?! (https://www.delphipraxis.net/86257-sinus-funktion-spinnt.html)

Klaus01 11. Feb 2007 18:52

Re: Sinus Funktion spinnt?!
 
Nun, wenn Du einen Wert auf 0 Prüfen willst,
kanst Du das mit isZero aus der Math Unit testen.

Hier ein Auszug aus der Hilfe:
Zitat:

Unit

Math
Category
Arithmetic routines

function IsZero(const A: Single; Epsilon: Single = 0): Boolean; overload;
function IsZero(const A: Double; Epsilon: Double = 0): Boolean; overload;
function IsZero(const A: Extended; Epsilon: Extended = 0): Boolean; overload;

Description
Use IsZero to test whether the value specified by AValue is zero, or differs from zero by at most Epsilon.
Grüße
Klaus

3_of_8 11. Feb 2007 18:57

Re: Sinus Funktion spinnt?!
 
Dabei sollte man erwähnen, dass Epsilon (in der Mathematik) eine reelle Zahl ist, die beliebig klein, aber größer als 0 ist. Soll also praktisch eine Art Wert sein, der "noch" als 0 gilt.

Du könntest übrigens versuchen, für Digits 0 oder 1 oder sowas anzugeben. Dann sollten die Nullen weg sein.

Hawkeye219 11. Feb 2007 19:35

Re: Sinus Funktion spinnt?!
 
Hallo,

vielleicht kannst du die Werte etwas vorbehandeln:

Delphi-Quellcode:
function Fuzzy (aValue: Double; aEpsilon: Double = 1E-9): Double;
begin
  if (Abs(aValue) < aEpsilon) then
    Result := 0.0
  else
    Result := aValue;
end;

begin
  Label1.Caption := Format('x: %.3g', [Fuzzy(x)]);
  Label2.Caption := Format('y: %.3g', [Fuzzy(y)]);
end;
Gruß Hawkeye

Namenloser 11. Feb 2007 20:27

Re: Sinus Funktion spinnt?!
 
Das sieht interessant aus, aber was macht das? :?:

Hawkeye219 11. Feb 2007 20:55

Re: Sinus Funktion spinnt?!
 
Die Funktion Fuzzy liefert für (absolut gesehen) sehr kleine Werte eine 0, alle anderen Werte werden unverändert zurückgegeben. Die Genauigkeit läßt sich optional über den Parameter aEpsilon vorgeben, der Defaultwert ist 1E-9.

Bei der Format-Funktion bewirkt die Angabe "%g" das, was FloatToStr mit dem Parameter ffGeneral erreicht - überflüssige Nullen am Ende werden abgeschnitten. In der Online-Hilfe von Delphi findest du eine genaue Beschreibung der Parameter unter dem Stichwort "SysUtils.Format Routine".

Gruß Hawkeye

swatch 19. Feb 2007 13:36

Re: Sinus Funktion spinnt?!
 
Könnte man anstatt der Funktion Fuzzy nicht auch die Funktion SimpleRoundTo aus der Unit Math verwenden? Diese würde auch für andere eventuelle, minimale Ungenauigkeiten einspringen.

(function SimpleRoundTo(const AValue: Double, const ADigit: TRoundToRange): Double;) //ADigit gibt die Rundungsgenauigkeit, also aEpsilon an


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:34 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz