Liebe Gäste des Forums
Danke, dass ihr euch hier auf dem inoffiziellen Windev-Forum umschaut. Hier werden Tipps und Hinweise zu der von PC-Soft angebotenen Software Windev besprochen.
Windev ist eine leistungsstarke, sehr umfangreiche Entwicklersoftware für Webseiten, Handys und Rechner verschiedener Betriebssysteme. Mehr unter http://www.windev.com

Compiler Fehler ?

Alle Themen rund um die Erstellung von Programmen
Antworten
BerndG
Junior Member
Beiträge: 2
Registriert: 30. November 2016, 14:52

Compiler Fehler ?

Beitrag von BerndG » 30. November 2016, 15:34

nProglänge is 4-byte unsigned int
progsize is 4-byte unsigned int

nProglänge = 100766

progsize = (( nProglänge / 128 ) + 1 ) * 128
// progsize = 100894 !!! falsch

progsize = nProglänge / 128
progsize += 1
progsize = progsize * 128

// progsize 100864 !! richtig

In dem ersten Beispiel wird das Ergebnis der Division offensichtlich nach REAL gewandelt, was weder
erwünscht noch nachvollziehbar ist.
Was kann der Grund dafür sein ?

Lewi
Member
Beiträge: 74
Registriert: 3. September 2010, 14:45
Wohnort: Hamburg
Kontaktdaten:

Re: Compiler Fehler ?

Beitrag von Lewi » 1. Dezember 2016, 19:14

Die nachfolgende Hilfeseite für WinDev führt die Grundlagen für die unterschiedlichen Integers auf: http://help.windev.com/en-US/?1514049&n ... f_integers

satmax
Member
Beiträge: 185
Registriert: 24. September 2015, 10:05
Wohnort: Biberbach, Austria
Kontaktdaten:

Re: Compiler Fehler ?

Beitrag von satmax » 1. Dezember 2016, 20:13

Ich konnte es gar nicht glauben, ist bei mir genau so...

satmax
Member
Beiträge: 185
Registriert: 24. September 2015, 10:05
Wohnort: Biberbach, Austria
Kontaktdaten:

Re: Compiler Fehler ?

Beitrag von satmax » 1. Dezember 2016, 22:53

Lewi hat geschrieben:Die nachfolgende Hilfeseite für WinDev führt die Grundlagen für die unterschiedlichen Integers auf: http://help.windev.com/en-US/?1514049&n ... f_integers
Aber eine Erklärung dafür finde ich da nicht.

Herbert
Site Admin
Beiträge: 374
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Re: Compiler Fehler ?

Beitrag von Herbert » 2. Dezember 2016, 15:31

Ehh?? Was wird denn da gerechnet???

100766/128=787.234375
+1 = 788.234375
788.234375*128=100894

Du rechnest 100766/128 und packst das in eine Integer. Abrunden! Da ist also eine mathematische Ungenauigkeit vorgegeben.

100766/128 muss als Ergenis real sein, wo wäre sonst die Genauigkeit? Umwandeln in Integer erwzingt ein Runden und provoziert ein vermeintlich falsches Ergebnis.
Du rundest ab auf 787. "Vergisst" also die Ungenauigkeit von 0.234375. Das Ganze * 128 ergibt die Differenz von genau 30. Die verschenkst einfach so und wirfst dem Compiler (eh der Mathematik) einen Fehler vor.

Deine Ueberlegungen sind falsch, der Compiler hat recht.

Wenn du es "falsch" willst, musst so rechnen:

Code: Alles auswählen

nProglänge is 4-byte unsigned int
nZiff,progsize are 4-byte unsigned int
rProgsize,rZiff are reals
nProglänge = 100766
rZiff=nProglänge / 128
nZiff=IntegerPart(rZiff)
Progsize = (nZiff + 1 ) * 128		//=100864
So nebenbei würde ich nie Umlaute in Variablen verwenden. Gib mal den Code einem Engländer, der hat die Zeichen nicht auf der Tastatur.

Antworten