AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eine ganzzahl herrausfinden?

Ein Thema von heru1990 · begonnen am 20. Mai 2008 · letzter Beitrag vom 20. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
heru1990

Registriert seit: 20. Mai 2008
8 Beiträge
 
#1

Eine ganzzahl herrausfinden?

  Alt 20. Mai 2008, 20:42
Heyho,

ich möchte das eine funktion als ergbnis eine Ganzzahl hat und habe das bisher folgendermaßen umgesetzt:

Delphi-Quellcode:
var
  Form1: TForm1;
   v:extended;
   v2:integer;
   i:real;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  i:=-100;
  v:=1;
  v2:=2;
  while v/v2<>1 do
  begin
  i:=i+0.0001;
    v:=(-8/5)*i+sqrt((39/25)*(i*i)-19);
    v2:=round(v);
   // label1.caption:=floattostr(v2);
   // label2.caption:=floattostr(v);
  end;
    label1.caption:=floattostr(v2);
    label2.caption:=floattostr(v);
   showmessage('YEAH');
end;
Es soll die funktion kalkuliert werden und durch den gerundeten wert geteilt werden. wenn beide werte gleichgroß sind und man diese dividiert kommt 0 raus --> ganze zahl


jedoch bringt er nach dem Klick die Meldung 'EInvalidOp' - 'Ungültige Gleitkommastelle'


was habe ich falsch gemacht?!?


vielen dank für eure hilfe
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Eine ganzzahl herrausfinden?

  Alt 20. Mai 2008, 20:47
In welcher Zeile kommt der Fehler und bei welchen Werten?
Markus Kinzler
  Mit Zitat antworten Zitat
heru1990

Registriert seit: 20. Mai 2008
8 Beiträge
 
#3

Re: Eine ganzzahl herrausfinden?

  Alt 20. Mai 2008, 20:48
v:=(-8/5)*i+sqrt((39/25)*(i*i)-19);

direkt wenn ich auf den button klicke
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Eine ganzzahl herrausfinden?

  Alt 20. Mai 2008, 20:50
Welchen Wert hat i, v, v2 dann?
Markus Kinzler
  Mit Zitat antworten Zitat
heru1990

Registriert seit: 20. Mai 2008
8 Beiträge
 
#5

Re: Eine ganzzahl herrausfinden?

  Alt 20. Mai 2008, 20:59
interessant...
Delphi-Quellcode:
  begin
  i:=i+0.0001;
    v:=(-8/5)*i+sqrt((39/25)*(i*i)-19);
    v2:=round(v);
    showmessage('v2 : '+floattostr(v2));
    showmessage('v : '+floattostr(v));
    //label1.caption:=floattostr(v2);
    //label2.caption:=floattostr(v);
  end;
wenn ich ne showmessage reinmache läuft er ohne problme und gibt werte immer aus

nach dem klick:
v = 248,8235...
v2 = 285
i = -99,999
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Eine ganzzahl herrausfinden?

  Alt 20. Mai 2008, 21:01
label1.caption:=IntToStr(v2);
Markus Kinzler
  Mit Zitat antworten Zitat
heru1990

Registriert seit: 20. Mai 2008
8 Beiträge
 
#7

Re: Eine ganzzahl herrausfinden?

  Alt 20. Mai 2008, 21:03
hab mehere varianten ausprobiert... er gibt die werte nur mit einem showmessage aus
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Eine ganzzahl herrausfinden?

  Alt 20. Mai 2008, 21:09
Herzlich willkommen in der Delphi-PRAXiS, heru1990.

Du suchst iterativ in Schritten von 1E-4 nach einer ganzzahligen Lösung einer Funktion. Dein Abbruchkriterium ist aber unzuverlässig, da dein Rechner ganzzahlige Ergebnisse oft nach Art der ersten Taschenrechner nur näherungsweise als Fließkommazahl wiedergeben kann. Notwendig ist da ein Epsilon-Test:

Delphi-Quellcode:
const
  EPSILON = 1E-8;

function F(x: Double): Double;
begin
  Result := (-8/5) * x + Sqrt(39 / 25 * x * x - 19);
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
var
  x, y: Double;
begin
  x := -100;
  repeat
    x := x + 0.0001;
    y := F(x);
  until IsZero(y - Round(y), EPSILON);
  ShowMessage(Format('%0.4f %.0n', [x, y]));
end;
Getippt und nicht getestet.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
heru1990

Registriert seit: 20. Mai 2008
8 Beiträge
 
#9

Re: Eine ganzzahl herrausfinden?

  Alt 20. Mai 2008, 21:17
Wow vielen dank =)

jedoch kommt die gleiche meldung mit der kommastelle in folgender zeile:

  Result := (-8/5) * x + Sqrt(39 / 25 * x * x - 19);
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Eine ganzzahl herrausfinden?

  Alt 20. Mai 2008, 21:49
Deine Funktion ist nicht für alle x aus R definiert.

Sobald der Ausdruck 39 / 25 * x * x - 19 negativ wird, siehst du die Ausnahme "Ungültige Gleitkommaoperation".

Du solltest das zu durchsuchende Intervall geeignet begrenzen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz