Gibt es in Delphi so etwas wie den Wert unendlich? Für Tipps und
Hinweise wäre ich sehr dankbar.
Vielen Dank im Voraus!
Liebe Grüße
Micha
Micha Lauterjung schrieb:
> für den Dijkstra-Algorithmus müsste ich in Delphi theoretisch
einige
> Variablen mit dem Wert "unendlich" belegen, um hinter das
gewünschte
> Ergebnis zu erreichen.
Du hast in einem echten Computer nur beschränkten Speicherplatz und
damit beschränkte Datentypen.
Als Ersatz für "+ Unendlich" verwendet man dann die größte maximal im
verwendeten Datentyp darstellbare Zahl, für "- Unendlich"
entsprechend die kleinste Darstellbare Zahl.
Also Beispiel:
type
TNumberType = Integer; // Um den Datentyp an
// zentraler Stelle ändern zu können
const
PosInfinity = High(TNumberType); // Größte darstellbare Zahl
NegInfinity = Low(TNumberType); // Kleinste darstellbare zahl
Traubensaft gibt Traubenkraft
Christian "NineBerry" Schwarz
--
Alle müssen mal kapieren, was der Sheriff will!
>für den Dijkstra-Algorithmus müsste ich in Delphi theoretisch einige
>Variablen mit dem Wert "unendlich" belegen, um hinter das gewünschte
>Ergebnis zu erreichen.
>
>Gibt es in Delphi so etwas wie den Wert unendlich? Für Tipps und
>Hinweise wäre ich sehr dankbar.
Ja, gibt es, zumindest bei den Fließkomma-Datentypen Single, Double und
Extended, deren Format unter anderem auch Bitkombinationen erlaubt, die
"unendlich" repräsentieren. Du findest in der Unit "Math" die Konstante
"infinity", die genau das darstellt, was Du suchst. (Die
Binärdarstellung ist ein mit binären Einsern gefülltes Exponentenfeld
und eine Mantisse, die den Binärbruch 1,0 enthält.)
In vielen Fällen (insbesondere wenn Du nur Integer-Zahlen brauchst)
reicht es allerdings auch, einfach die für den verwendeten Variablentyp
jeweils betragsmäßig größte darstellbare Zahl zu verwenden.
Ingo Kemper
--
__ _ __ __ __ __
__/ /_/ \/ /_/____/_ |___Sky...@uni-muenster.de___---===> \
/_/ /_/\_/ |__/ |__/ ~~~~~~~~~~~~~~~~~~~~~~~~~ ---===>__/
> Hallo zusammen,
> für den Dijkstra-Algorithmus müsste ich in Delphi theoretisch einige
> Variablen mit dem Wert "unendlich" belegen, um hinter das gewünschte
> Ergebnis zu erreichen.
>
> Gibt es in Delphi so etwas wie den Wert unendlich? Für Tipps und
> Hinweise wäre ich sehr dankbar.
Schon, aber nur für Real-Datentypen:
const
Infinite = 1/0;
Das ist im affinen Sinn zu verstehen.
Nützlich, wenn man einer Fließkommavariablen einen undefinierten Wert zuweisen will:
const
Indefinite = 0/0;
Diese auf den ersten Blick vielleicht krude anmutenden Definitionen sind IEEE
754-konform. In neueren Delphi-Versionen (6? 7?) hab ich vergleichbare
Deklarationen schon in RTL-Units gesehn (Math? Bin zu faul, jetzt nachzusehn,
such nach "Infinity" und "NAN").
Delphi braut da kein eigenes Süppchen, sondern bedient sich der
Fließkommaeinheit des Prozessors, die den IEEE-Standard in Hardware realisiert.
Man kann mit diesen Werten übrigens auch "rechnen".
Funktionen im Zusammenhang mit unendlichen Werten und Nicht-Zahlen (NaNs)
findest Du in der JCL (JclMath).
Gruß, Robert
--
Project JEDI: http://projectjedi.sourceforge.net/
JEDI Code Lib: http://sourceforge.net/projects/jcl/
JCL Newsgroup: news://forums.talkto.net/jedi.jcl
Wenn ich nämlich den größsten darstellbaren Wert als unendlich nehmen würde,
hätte ich ein Problem, da meines Wissens die Addition 5+unendlich einen
negativen
Wert liefern würde, oder irre ich mich da..?
Vielen Dank schonmal...
Liebe Grüße
Micha
"Ingo Kemper" <SkyG...@uni-muenster.de> schrieb im Newsbeitrag
news:b4ghr...@ingo.tgl.westfalen.de...
> Ich muss mit diesem Wert eine simple Addition (z.B. 5+unendlich =
> unendlich) durchführen. Ist das mit der INFINITY-Konstante
> möglich?
>
> Wenn ich nämlich den größsten darstellbaren Wert als unendlich
> nehmen würde, hätte ich ein Problem, da meines Wissens die
> Addition 5+unendlich einen negativen
> Wert liefern würde
Im Integer-Breeich ja. Für Fließkommazahlen geht das:
const
NAN = 0.0 / 0.0;
INF = 1.0 / 0.0;
procedure TWorkForm.Button1Click(Sender: TObject);
var
A, B, X: Extended;
begin
A := 5;
B := INF;
X := A + B;
ShowMessage(FloatToStr(X));
end;
-Michael