![]() |
zufällig erzeugte singles haben zu viele nachkommastellen.
hi, folgender code:
Delphi-Quellcode:
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.:
random(5) + (random(100)/100)
//^ 0..5 ^ ^ 0.00..0.99 ^
Code:
warum? werden die nachkommastellen beim zuweisen nicht weiter beachtet, muss ich deshalb erst mal den kompletten speicherbereich des arrays nullen?
0,0299999993294477;
4,19999980926514; 1,66999995708466; 1,1599999666214; 1,41999995708466; 0,469999998807907; 0,839999973773956; 0,28999999165535; 4,3600001335144; 3,3199999332428; ist an meinem code was falsch? vielen dank schon mal für die hilfe. |
Re: zufällig erzeugte singles haben zu viele nachkommastelle
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:
muss dir nicht unbedingt die Messagebox ausgegeben, auch wenn man es erwartet.
a := 1.0;
if a = 1 then ShowMessage('Test'); |
Re: zufällig erzeugte singles haben zu viele nachkommastelle
aha... mal sehen, was ich da machen kann.
|
Re: zufällig erzeugte singles haben zu viele nachkommastelle
Auch hierzu nochmal
![]() Gruss, Fabian |
Re: zufällig erzeugte singles haben zu viele nachkommastelle
Zitat:
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! |
Re: zufällig erzeugte singles haben zu viele nachkommastelle
ja, hast recht. das ist mir aber im moment ziemlich egal, solange ich das kommastellenproblem habe ;)
|
Re: zufällig erzeugte singles haben zu viele nachkommastelle
Delphi-Quellcode:
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)
random(600)/100 // 0 .. 5.99
Ansonten kannst du halt immer nur mit gerundeten Werten arbeiten und nicht mit direkten Verkgleichen. |
Re: zufällig erzeugte singles haben zu viele nachkommastelle
danke. currency ist sicher eine gute möglichkeit. geht ja auch um geldbeträge....
EDIT: ja, das scheint gut zu gehen. |
Re: zufällig erzeugte singles haben zu viele nachkommastelle
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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-2025 by Thomas Breitkreuz