vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Allgemeine Diskussionen
Re: VB rechnet FALSCH 
Autor: Wöllmi
Datum: 21.04.03 23:14

Hi alle zusammen,

ich meinte nicht, daß man Double anwenden soll damit es genauer wird,
sondern, daß man das Ergebnis selber auf die richtige Genauigkeit runden
muß, weil Double bzw. Single verwendet wird!
Ein Single reicht natürlich voll aus

129,76 sind genau 2 Stellen nach dem Komma, also brnötige ich eben keine
höhere Genauigkeit als diese beim Abziehen von 129,60.

Das Problem ist die interne Konvertierung der Datentypen!

Bitte die Folgebeziehung beachten.

Ein "single precision floating point" besteht nach IEEE754 aus 4 Byte. Aus diesen
wird per definierter Vorschrift eine Dezimalzahl gewonnen.

z.B. &h418A0000 = 17,25

0 10000011 000 1010 0000 0000 0000 0000
| | ______| |_Mantisse________________|
| |
| Exponent
Vorzeichen

Eine derartige Float -Zahl liegt im Speicher als 32 Bit Hexwert vor. Und diese Konvertierung nimmt VB scheinbar in einem Zwischenschritt vor. Bestimmt
um schneller zu rechen (Assembler). Es wird also direkt mit dem Speicherabbild
gearbeitet.

Und dies ist das Problem!

Nicht jede Zahl läßt sich "EinEin-deutig" und somit 100% genau in eine derartige
Hex-Zahl umwandlen. Es resultiert also ein minimaler Fehler, der dann zu diesem
Phänomen führt.

0,1 ist z.B. nicht genau darstellbar, da bis auf die letzte mögliche Stelle die
Bildungsvorschrift greift. Und da gibt es nunmal nur 0,0999999999.....
(0,1 => &h3DCCCCCC => 9,99999940395355E-02)

D.h. die Konvertierung Dez. in 32-Bit Float (Speicherabbild) bedeutet in diesem Fall
eine Zunahme der zu wertenden Nachkommastellen, da der Ergebniswert nicht zu
100% im IEEE Format darstellbar ist. (Thema Restfehler)

Das Problem was VB nun scheinbar hat ist, nicht zu wissen, daß der Anwender
aber ebne nur 2 Stellen nach dem Komma benötigt und somit gerundet werden muß.

Dies nun aber muß der Anwender eben selber tun!!!!!!!!

Und dies meinte ich.

Also zugegeben, Vb rechnet durch diesen Umstand scheinbar nicht ganz genau.
Doch das Problem ist eigentlich in der Natur der EDV zu suchen und mit dem
erforderlichen Hintergrundwissen leicht zu umschiffen!

Alles nur mit 0 und 1 darstellen zu wollen hat eben auch ein paar Haken!

Im Matheunterricht mußte ich früher auch immer eine Überschlagsrechnung
durchführen, um mein Ergebnis grundsätzlich als "real" oder "unmöglich"
vor der Bewertung durch den Lehrer zu beurteilen.
Auch dem heutigen Programmierer wird dies nicht abgenommen.

Tschaui
Woellmi

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
VB rechnet FALSCH1.628Meister Phantom21.04.03 10:40
Re: VB rechnet FALSCH1.267Andi W21.04.03 11:23
Re: VB rechnet FALSCH1.505Wöllmi21.04.03 13:11
Re: VB rechnet FALSCH1.270Andi W21.04.03 13:31
Re: VB rechnet FALSCH1.365ModeratorMartoeng21.04.03 14:36
Re: VB rechnet FALSCH1.260Andi W21.04.03 15:42
Re: VB rechnet FALSCH128Verzweifelter21.04.03 14:44
Re: VB rechnet FALSCH1.436Wöllmi21.04.03 23:14
Re: VB rechnet FALSCH1.259Andi W22.04.03 08:07
Re: VB rechnet FALSCH1.250Meister Phantom22.04.03 09:09
Re: VB rechnet FALSCH1.285Wöllmi22.04.03 18:47

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel