AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi zufällig erzeugte singles haben zu viele nachkommastellen.
Thema durchsuchen
Ansicht
Themen-Optionen

zufällig erzeugte singles haben zu viele nachkommastellen.

Ein Thema von DGL-luke · begonnen am 7. Okt 2005 · letzter Beitrag vom 8. Okt 2005
Antwort Antwort
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

zufällig erzeugte singles haben zu viele nachkommastellen.

  Alt 7. Okt 2005, 15:12
hi, folgender code:

Delphi-Quellcode:
random(5) + (random(100)/100)
//^ 0..5 ^ ^ 0.00..0.99 ^
sollte mir werte von 0,01 bis 5,99 erzeugen. und zwar 0,010000 bis 5,990000. ich lade diese werte in ein array of single. rauskopmmen tut dann z.B.:


Code:
0,0299999993294477;
4,19999980926514;
1,66999995708466;
1,1599999666214;
1,41999995708466;
0,469999998807907;
0,839999973773956;
0,28999999165535;
4,3600001335144;
3,3199999332428;
warum? werden die nachkommastellen beim zuweisen nicht weiter beachtet, muss ich deshalb erst mal den kompletten speicherbereich des arrays nullen?

ist an meinem code was falsch?

vielen dank schon mal für die hilfe.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: zufällig erzeugte singles haben zu viele nachkommastelle

  Alt 7. Okt 2005, 15:17
Eigenart von Computern, dass sie gleitkommazahlen nicht 100% genau darstellen können. Problem ist, dass die Nachkommazahlen eine gewisse Genauigkeit. Nutze am besten Funktionen wie FormatFloat und vergleiche Gleitkommazahlen nicht auf Gleichheit. Vermeide sie, wo es wirklich um Genauigkeit geht, denn

Delphi-Quellcode:
a := 1.0;
if a = 1 then
  ShowMessage('Test');
muss dir nicht unbedingt die Messagebox ausgegeben, auch wenn man es erwartet.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: zufällig erzeugte singles haben zu viele nachkommastelle

  Alt 7. Okt 2005, 15:25
aha... mal sehen, was ich da machen kann.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: zufällig erzeugte singles haben zu viele nachkommastelle

  Alt 7. Okt 2005, 16:44
Auch hierzu nochmal mein Beitrag den ich gerne in solchen Threads wie deinen verlinke, einfach zum Verständnis.

Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#5

Re: zufällig erzeugte singles haben zu viele nachkommastelle

  Alt 8. Okt 2005, 10:33
Zitat von DGL-luke:
Delphi-Quellcode:
random(5) + (random(100)/100)
//^ 0..5 ^ ^ 0.00..0.99 ^
sollte mir werte von 0,01 bis 5,99 erzeugen. und zwar 0,010000 bis 5,990000.
das stimmt nicht ganz, denn das Integer-Random() erzeugt werte 0 <= Random(x) < x !
oder auch 0 <= Random(x) <= x-1.
d.h. dass bei dem Integer-Random die angegebene Zahl nicht erreicht wird, und das ergebniss ist immer um eins kleiner als die angegebene zahl!
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#6

Re: zufällig erzeugte singles haben zu viele nachkommastelle

  Alt 8. Okt 2005, 10:39
ja, hast recht. das ist mir aber im moment ziemlich egal, solange ich das kommastellenproblem habe
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: zufällig erzeugte singles haben zu viele nachkommastelle

  Alt 8. Okt 2005, 11:30
random(600)/100 // 0 .. 5.99 Du kannst ja Currency verwenden, dat hat immer maximal 4 nachkommastellen und sollte bei denen 2 Stellen auch keine Rundungsfehler erzeugen. (ist ja intern auch ein scalierter Integer und kein echter Float)

Ansonten kannst du halt immer nur mit gerundeten Werten arbeiten und nicht mit direkten Verkgleichen.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#8

Re: zufällig erzeugte singles haben zu viele nachkommastelle

  Alt 8. Okt 2005, 11:35
danke. currency ist sicher eine gute möglichkeit. geht ja auch um geldbeträge....

EDIT: ja, das scheint gut zu gehen.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

Re: zufällig erzeugte singles haben zu viele nachkommastelle

  Alt 8. Okt 2005, 11:58
Zitat von DGL-luke:
danke. currency ist sicher eine gute möglichkeit. geht ja auch um geldbeträge....

EDIT: ja, das scheint gut zu gehen.
Das ist natürlich so beabsichtigt, denn Currency wurde ja extra für derartige Dinge entwickelt.

Zitat von Die OH:
Der Typ Currency ist ein Festkomma-Datentyp, der Rundungsfehler in finanzmathematischen Berechnungen minimiert. Er wird als skalierter 64-Bit-Integer gespeichert, bei dem die vier niedrigst wertigen Stellen implizit vier Nachkommastellen repräsentieren. Bei einer Kombination mit anderen reellen Typen in Zuweisungen und Ausdrücken werden Currency-Werte automatisch mit 10000 multipliziert.
$2B or not $2B
  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 17:34 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