AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Kann man den Wertebereich eingrenzen ?
Thema durchsuchen
Ansicht
Themen-Optionen

Kann man den Wertebereich eingrenzen ?

Ein Thema von M3g0n · begonnen am 16. Okt 2017 · letzter Beitrag vom 17. Okt 2017
Antwort Antwort
Benutzerbild von M3g0n
M3g0n

Registriert seit: 22. Sep 2017
3 Beiträge
 
#1

Kann man den Wertebereich eingrenzen ?

  Alt 16. Okt 2017, 13:49
Hallo Zusammen,

also ich bin dabei einen Taschenrechner zu Programmieren und verwende dazu double Werte. Natürlich hat double auch nur einen bestimmten Wertebereich und da wollte ich mal nach hören ob man im programm das irgdenwie angeben kann...Denn sonst kommt bei einer zu hohen Zahl so ein ergebnis raus:
Zahl.PNG
und das soll es eben nicht...
Deshalb hab ich die frage ob man den eingegrenzten Wertebereich irgendwie angeben kann, das wenn die Zahl zu groß oder zu klein ist eine Fehlermeldung erscheint und die Zahl automatisch auf null gesetzt wird...Bei Integern ist mir das ganze klar...Aber bei einem double ist das für mich ein großes Problem.

Liebe Grüße und schon mal danke im Vorraus
M3g0n
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.071 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Kann man den Wertebereich eingrenzen ?

  Alt 16. Okt 2017, 14:04
Das nennt sich Bedingungen. Du kannst das über eine if-Abfrage lösen.
Schaue mal hier auf Seite 31, Kapitel 3.4.2. Bedingungen:
https://downloads.delphi-treff.de/DelphiStarter.pdf
  Mit Zitat antworten Zitat
Benutzerbild von M3g0n
M3g0n

Registriert seit: 22. Sep 2017
3 Beiträge
 
#3

AW: Kann man den Wertebereich eingrenzen ?

  Alt 16. Okt 2017, 14:10
Schon mal dankeschön für diese schnelle und liebe Antwort. Aber das mit der Bedinung ist mir bewusst..meine frage ist wie ich das mit einem double in eine Bedinung rein bringen soll....da der Wertebereich ja 5.0*10^-324 .. 1.7*10^308 beträgt...
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: Kann man den Wertebereich eingrenzen ?

  Alt 16. Okt 2017, 14:24
Du schaust halt mal, bis zu welchem Wert Du mit Deiner Routine korrekt arbeiten kannst und fragst den an geeigneter Stelle im Programm ab.
Delphi-Quellcode:
const
  Maximalwert: Double = 100000000; // als Beispiel

var
  Eingabe : Double;

  // an geeignetet Stelle:
  if Eingabe > MaxDouble then begin
    MessageDlg(Format('Der Eingabewert %f übersteigt den zulässigen Maximalwert von %f.',[Eingabe,Maximalwert]),mtError,[mbOk],0);
  end else begin
    // Beliebige Berechnung, Verarbeitung, Ausgabe ...
  end;
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.071 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Kann man den Wertebereich eingrenzen ?

  Alt 16. Okt 2017, 14:32
Achso, deine Frage ist aber auch etwas unpräzise.
Dafür gibt es Konstanten in der Unit Math.
Schaue dir an wie sie in der Unit definiert sind und dann weißt du auch wie man Double-Zahlen mit Exponentialschreibweise in Delphi definiert.

Delphi-Quellcode:
program Project3;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Math;

var
  YourNumber : Double;

begin
  try
    YourNumber := (Random * Random) / Random;

    if (YourNumber < System.Math.MaxDouble) and (YourNumber > System.Math.MinDouble) then
    begin
      // make magic
       Writeln(YourNumber);
    end else
      YourNumber := 0;

    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
  Mit Zitat antworten Zitat
Benutzerbild von M3g0n
M3g0n

Registriert seit: 22. Sep 2017
3 Beiträge
 
#6

AW: Kann man den Wertebereich eingrenzen ?

  Alt 16. Okt 2017, 15:01
Dankeschön euch Zwei das hat mir wirklich sehr geholfen und habs hinbekommen.
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#7

AW: Kann man den Wertebereich eingrenzen ?

  Alt 16. Okt 2017, 21:19
Er hats zwar herausgefunden, aber ich denke er suchte nicht den Max-Wert von Double sondern den Wert, ab dem der Kram mit E25 an die Zahl gehängt wurde.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.259 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Kann man den Wertebereich eingrenzen ?

  Alt 17. Okt 2017, 15:56
Hai M3g0n,

ich glaube dein Denkansatz ist nicht richtig

Es geht ja nicht darum das ich nicht eine sehr große Zahl eingeben darf. Es muss verhindert werden das das Ergebnis der Berechnung zu groß ist.

Wenn ich also eine Zahl eingebe die genau 1.7*10^308 -2 groß ist und zu dieser Zahl eine 1 addiere ist alles okay. Wenn ich aber eine 3 addiere kommt es zu einem Überlauf.
Du kannst also zum Beispiel hingehen und sagen das die Eingabe auf z.B Wurzel aus 1.7*10^308 beschränkt ist. Dann könntest Du diese zahl mit sich selber multiplizieren ohne einen Fehler zu haben.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#9

AW: Kann man den Wertebereich eingrenzen ?

  Alt 17. Okt 2017, 20:52
Wenn ich also eine Zahl eingebe die genau 1.7*10^308 -2 groß ist und zu dieser Zahl eine 1 addiere ist alles okay. Wenn ich aber eine 3 addiere kommt es zu einem Überlauf.
Nein, es kommt zu keinem Überlauf, weil in FP-Arithemtik 1.7*10^308 -2 + 3 = 1.7*10^308 +1 = 1.7*10^308 ist, und dies ist wesentlich kleiner als der maximale Doublewert 1.797693134862315E+308. Überlauf gibt es zB bei 1.06 * 1.7E308.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 Uhr.
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 by Thomas Breitkreuz