Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Zahlenwert "unendlich" in Delphi?

100 views
Skip to first unread message

Micha Lauterjung

unread,
Mar 9, 2003, 3:50:20 PM3/9/03
to
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.

Vielen Dank im Voraus!

Liebe Grüße
Micha


Christian NineBerry Schwarz

unread,
Mar 9, 2003, 3:59:43 PM3/9/03
to
Hallo 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!

Ingo Kemper

unread,
Mar 9, 2003, 5:14:05 PM3/9/03
to
On Sun, 9 Mar 2003 21:50:20 +0100, Micha Lauterjung wrote:

>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___---===> \
/_/ /_/\_/ |__/ |__/ ~~~~~~~~~~~~~~~~~~~~~~~~~ ---===>__/

Robert Rossmair

unread,
Mar 9, 2003, 6:45:38 PM3/9/03
to
Micha Lauterjung schrieb:

> 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

Robert Rossmair

unread,
Mar 9, 2003, 6:49:14 PM3/9/03
to
Ups, Ingo war schneller.

Micha Lauterjung

unread,
Mar 11, 2003, 11:27:15 AM3/11/03
to
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, 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...

Michael Winter

unread,
Mar 11, 2003, 3:04:00 PM3/11/03
to
Micha Lauterjung wrote:

> 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

0 new messages