AGB  ·  Datenschutz  ·  Impressum  







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

bernoulli programm

Ein Thema von LiS · begonnen am 30. Mai 2005 · letzter Beitrag vom 2. Jun 2005
Antwort Antwort
LiS

Registriert seit: 3. Dez 2004
87 Beiträge
 
Turbo Delphi für Win32
 
#1

bernoulli programm

  Alt 30. Mai 2005, 14:43
hi
ich hab mir mal auf die schnelle ein bernoulli programm geschrieben, allerdings gibt es bei geringen zahlen schon falsche ergebnisse. (bis 20 versuche funktioniert es noch)
hier der quelltext

Delphi-Quellcode:
function fak(k:integer):integer;
var i:integer;
begin
  result := 1;
  for i := 2 to k do result := result * i;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  p:extended;
function ncr(n,k:integer):integer;
var i:integer;
begin
  result := n-k+1;
  for i := 2 to k do result := result*(n-k+i);
  result := round(result / fak(k));
end;
begin
  p:=0;
  p:=power(strtofloat(edit1.Text),strtoint(edit3.Text));
  p:=p*power(1-strtofloat(edit1.Text),(strtoint(edit2.Text)-strtoint(edit3.Text)));
  p:=p*ncr(strtoint(edit2.Text),strtoint(edit3.Text));
  p:=100*p;
  label4.Caption := floattostr(p);
end;
edit1 = Wahrscheinlichkeit
edit2 = Versuche
edit3 = Erfolge
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: bernoulli programm

  Alt 30. Mai 2005, 14:58
Zitat von LiS:
hi
ich hab mir mal auf die schnelle ein bernoulli programm geschrieben, allerdings gibt es bei geringen zahlen schon falsche ergebnisse. (bis 20 versuche funktioniert es noch)
Beim Berechnen der Fakultät einer Zahl gibt es sehr schnell extrem hohe Werte.
Mit einem normalen Integer (MaxInt=2147483647)bist du da ganz schnell am Ende.
13! müsste einen 32bit Integer schon sprengen.

Der Trick an der Sache ist nun das geschickte Kürzen der Terme.
Beim Berechnen von N über K (bei dir in funcion ncr) muss alles versucht werden, damit Werte, die sich
sowieso wegkürzen, gar nicht erst berechnet werden.
Andreas
  Mit Zitat antworten Zitat
LiS

Registriert seit: 3. Dez 2004
87 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: bernoulli programm

  Alt 30. Mai 2005, 15:01
ok... kürzen
werd ich mal versuchen
danke!
  Mit Zitat antworten Zitat
Benutzerbild von BenBE
BenBE

Registriert seit: 3. Apr 2005
Ort: Jahnsdorf
48 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: bernoulli programm

  Alt 2. Jun 2005, 12:43
Schau Dir mal in cvs.sourceforge.net/viewcvs.py/omorphia/omorphia/library/source/OMathGeneral.pas (Omorphia Projekt) die Funktion BinomialRow an.

Mit dieser kannst Du die NCR-Dinge auch sehr einfach Berechnen, ohne einen Overflow zu erhalten.

Die Extended-Implementierung hält bis Zeile 16391 mit, sollte also für deine Zwecke vollkommen ausreichen.
Benny Baumann
Je komplexer das System, desto kleiner die Fehler; je kleiner die Fehler, desto häufiger ihr Auftreten!
  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 20:48 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