Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 16:58

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Problem bei addition von Kommazahlen

Discussion on Problem bei addition von Kommazahlen within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
Problem bei addition von Kommazahlen

Hallo,
Ich beschäftige mich gerade mit GDIPlus und diesbezüglich mit Parabeln usw.
Dabei habe ich eine Schleife nach diesem Schema:
Code:
$x = -100
do
	$x+=0.01
	ConsoleWrite($x & @CRLF)
Until $x >= 100
Warum entstehen nun Zahlen mit mehr als 2 Nachkommastellen?

Lawliet is offline  
Old 03/26/2012, 17:43   #2
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Liegt wohl an der internen Speicherung. Da nur begrenzt Speicherplatz zur Verfügung steht, muss man Abstriche bei der Genauigkeit machen. Bedenke nur: Zwischen 0 und 1 liegen unendlich viele Kommzahlen! Man trennt den Speicherbereich ungefähr folgendermaßen auf:

vorzeichenbit | exponent | mantisse

Jetzt finden intern noch Normierungsverfahren statt, damit mehr Zahlen abgespeichert werden können und zum leichteren Rechnen für das Rechenwerk. Das alles verändert die Zahl natürlich. Sprich: Du erhälst mehr als zwei Nachkommastellen wegen der internen Speicherung der Zahl.
Lösung: Runde nach zwei Stellen.
xNopex is offline  
Thanks
1 User
Old 03/26/2012, 17:46   #3
 
elite*gold: 0
Join Date: Mar 2011
Posts: 8,645
Received Thanks: 3,454
^
Aber zum Runden der Zahl kannst du Round() benutzen
Freddy​ is offline  
Thanks
1 User
Old 03/26/2012, 17:48   #4
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Quote:
Originally Posted by xNopex View Post
Liegt wohl an der internen Speicherung. Da nur begrenzt Speicherplatz zur Verfügung steht, muss man Abstriche bei der Genauigkeit machen. Bedenke nur: Zwischen 0 und 1 liegen unendlich viele Kommzahlen! Man trennt den Speicherbereich ungefähr folgendermaßen auf:

vorzeichenbit | exponent | mantisse

Jetzt finden intern noch Normierungsverfahren statt, damit mehr Zahlen abgespeichert werden können und zum leichteren Rechnen für das Rechenwerk. Das alles verändert die Zahl natürlich. Sprich: Du erhälst mehr als zwei Nachkommastellen wegen der internen Speicherung der Zahl.
Lösung: Runde nach zwei Stellen.
Bei einer nativen Sprache wie C++ mag das stimmen. Aber da AutoIt dynamische Typen verwendet könnte es sein, dass alle Zahlen als Strings abgespeichert werden und je nach Verwendung intern in Zahlen umgewandelt werden.
jacky919 is offline  
Thanks
1 User
Old 03/26/2012, 17:55   #5
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Quote:
Bei einer nativen Sprache wie C++ mag das stimmen. Aber da AutoIt dynamische Typen verwendet könnte es sein, dass alle Zahlen als Strings abgespeichert werden und je nach Verwendung intern in Zahlen umgewandelt werden.
Trotzdem müssen die Dezimalzahlen abgespeichert werden. Und das Rechenwerk schließlich mit den Zahlen rechnen. Sie werden eben erst zur Laufzeit dann umgewandelt.
xNopex is offline  
Old 03/26/2012, 19:58   #6
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
um dem entgegen zu wirken kannst du dir über stringfunktionen aber durchaus eine eigene funktion schreiben, welche nachkommastellen und vorkommastellen seperat als integer handelt, und somit der ungenauigkeit der floatingpoint operation entgegen wirken.
lolkop is offline  
Old 03/26/2012, 20:07   #7
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Quote:
um dem entgegen zu wirken kannst du dir über stringfunktionen aber durchaus eine eigene funktion schreiben, welche nachkommastellen und vorkommastellen seperat als integer handelt, und somit der ungenauigkeit der floatingpoint operation entgegen wirken.
Oder einfach die Zahlen jeweils mit 100 Multiplizieren und am Schluss wieder durch 100 teilen.
xNopex is offline  
Old 03/26/2012, 20:16   #8
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by xNopex View Post
Oder einfach die Zahlen jeweils mit 100 Multiplizieren und am Schluss wieder durch 100 teilen.
in diesem falle mag das funktionieren, bei unbekannter bzw varrierender anzahl der nachkommastellen hingegen kann man so nicht an das problem gehen, zumal bei hoher anzahl von nachkommastellen durch die division ja auch wieder rundungsfehler entstehen könnten.
lolkop is offline  
Old 03/26/2012, 20:30   #9
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Quote:
bei unbekannter bzw varrierender anzahl der nachkommastellen hingegen kann man so nicht an das problem gehen
Eigentlich ist das gängige Praxis. Natürlich geht das nicht immer, aber in sehr sehr vielen Fällen. Es gibt dabei auch Möglichkeiten so bei unbekannter oder variierender Anzahl an Nachkommastellen zu verfahren.
Man wird dabei auch immer genauere Ergebnisse erzielen als bei der gleichen Rechnung in Gleitkommarithmetik. Je mehr Rechenschritte notwedig sind, desto genauere Ergebnisse wird dieses Verfahren liefern. Rundungsfehler treten dann wenn überhaupt im letzten Schritt bei der Rücktransformation auf.
xNopex is offline  
Old 03/26/2012, 21:27   #10


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
Naja, in meinem Falle hat das Runden auf 2-4 Kommastellen vollkommen gereicht
Danke
Lawliet is offline  
Reply


Similar Threads Similar Threads
WTB HON account with all limited addition avatars emerald name ect
04/22/2012 - Heroes of Newerth - 3 Replies
Looking for an old hon account must have all the limited edition avatars gold pebs, valk, swiftblade ect ect emerald name is a must msg me for more details aim lguid (at) live dot com
iBot Addition - DexProjects
01/30/2012 - SRO Hacks, Bots, Cheats & Exploits - 8 Replies
Hello again ! I upgrade my old project for iBot. It's coded in AutoIT again. It's easy and simple like always. Minimal processor usage. For now it contains : - AutoBuffer - Hider
Addition in der Konsolenausgabe...
01/07/2012 - C/C++ - 20 Replies
Hi, weiß zufällig jemand warum das hier nicht funktioniert?
I want a way purposes in addition to the merchant
12/13/2011 - Rappelz Private Server - 9 Replies
welcome guys i want to add purposes to the merchand without the program because there is no purposes that i want like the wings, the growns 150 and the chips and thanks for all



All times are GMT +1. The time now is 16:58.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.