Site Announcements

Liebe Gäste des Forums, wir freuen uns, dass ihr zu uns gelangt seid.
Windev ist eine sehr umfangreiche und starke Entwicklerumgebung für Anwendungen unter Windows, Linux und Internetapplikationen inkl. Mobile.
Hier sind Antworten und Anregungen dazu zu finden!
Möchtest du aktiv mitschreiben? Dann melde dich durch Klick auf den Text "Registrieren" hier rechts oberhalb an.

Compiler Fehler ?

Alle Themen rund um die Erstellung von Programmen

Compiler Fehler ?

Beitragvon 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 ?
BerndG
Junior Member
 
Beiträge: 2
Registriert: 30. November 2016, 14:52
Has thanked: 0 time
Have thanks: 0 time

Re: Compiler Fehler ?

Beitragvon 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&name=Different_types_of_integers
Lewi
Member
 
Beiträge: 74
Registriert: 3. September 2010, 14:45
Wohnort: Hamburg
Has thanked: 0 time
Have thanks: 1 time

Re: Compiler Fehler ?

Beitragvon satmax » 1. Dezember 2016, 20:13

Ich konnte es gar nicht glauben, ist bei mir genau so...
satmax
Member
 
Beiträge: 165
Registriert: 24. September 2015, 10:05
Wohnort: Biberbach, Austria
Has thanked: 0 time
Have thanks: 1 time

Re: Compiler Fehler ?

Beitragvon 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&name=Different_types_of_integers


Aber eine Erklärung dafür finde ich da nicht.
satmax
Member
 
Beiträge: 165
Registriert: 24. September 2015, 10:05
Wohnort: Biberbach, Austria
Has thanked: 0 time
Have thanks: 1 time

Re: Compiler Fehler ?

Beitragvon 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.
Herbert
Site Admin
 
Beiträge: 357
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Has thanked: 5 times
Have thanks: 3 times


Zurück zu Programmierung allgemein

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron