Bug report bei type casting

Thomas.AC
Benutzer
Avatar
Geschlecht: keine Angabe
Alter: 44
Beiträge: 308
Dabei seit: 07 / 2013
Betreff:

Bug report bei type casting

 · 
Gepostet: 15.05.2014 - 12:29 Uhr  ·  #1
Hallo,

das type casting im unten stehenden code liefert im Simulator ein falsches Ergebnis (siehe Bild).
Dies ist meiner Ansicht nach ein Bug. Bitte um Prüfung.

Gruß
Thomas.AC

Code

program main;

{$WG}                // global Warnings

Device = xmega32A4, VCC=3.3;

Define_Fuses
    Override_Fuses;
    NoteBook   = A;
    COMport    = USB;
    LockBits0  = [];
    FuseBits0  = [];
    FuseBits1  = [];
    FuseBits2  = [];
    FuseBits5  = [BODLEVEL0, BODLEVEL2, BODACT0];   //BOD = 2.96V

Import
    SysTick,
    SerPortC1;
    
From System Import
    LongWord, LongInt, Float;

Define
    //OSCtype = int32MHz, PLLmul=4, prescA=1, prescB=1, prescC=1;
    OSCtype = extXTAL=8000000, PLLmul=4, prescA=1, prescB=1, prescC=1;
    SysTick        = 10;             {msec}
    StackSize      = 512, iData;
    FrameSize      = 512, iData;
    SerportC1      = 19200;
    
Implementation

{$IDATA}

var
  zahl    : float;
  intzahl : longint;

begin
    zahl    := 10;
    intzahl := Longint(-zahl); // simulator diplays $00000000
end main.

Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 26
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: Bug report bei type casting

 · 
Gepostet: 15.05.2014 - 13:51 Uhr  ·  #2
Hallo Thomas,

das ist ein Bug Report der uns allen das Leben doch sehr vereinfacht.
Bug ist jetzt raus. Update am Wochenende.

danke
rolf
Thomas.AC
Benutzer
Avatar
Geschlecht: keine Angabe
Alter: 44
Beiträge: 308
Dabei seit: 07 / 2013
Betreff:

Re: Bug report bei type casting

 · 
Gepostet: 15.05.2014 - 16:27 Uhr  ·  #3
Hallo Rolf,

freut mich sehr. Danke für die schnelle Behebung.
Dann kann ich ja jetzt nachlegen.

Bug 1:
Ich möchte den kleinsten Wert, den man mit LongInt darstellen kann, zu float casten.
Der Simulator liefert als Ergebnis 2^31 anstatt -2^31.

Bug 2: (wenn es denn einer ist):
Ich möchte Float nach Longint casten und anschließend mit runerr auf Überlauf prüfen.
Dies scheitert, wenn die floatzahl zwischen 2^31 und 2^32 liegt.

Grüße aus Aachen

Thomas


Code

program main;

{$WG}                // global Warnings

Device = xmega32A4, VCC=3.3;

Define_Fuses
    Override_Fuses;
    NoteBook   = A;
    COMport    = USB;
    LockBits0  = [];
    FuseBits0  = [];
    FuseBits1  = [];
    FuseBits2  = [];
    FuseBits5  = [BODLEVEL0, BODLEVEL2, BODACT0];   //BOD = 2.96V

Import
    SysTick,
    SerPortC1;
    
From System Import
    LongWord, LongInt, Float;

Define
    //OSCtype = int32MHz, PLLmul=4, prescA=1, prescB=1, prescC=1;
    OSCtype = extXTAL=8000000, PLLmul=4, prescA=1, prescB=1, prescC=1;
    SysTick        = 10;             {msec}
    StackSize      = 512, iData;
    FrameSize      = 512, iData;
    SerportC1      = 19200;
    
Implementation

{$IDATA}

var
minLongInt : Float;
betweenMaxLongIntAndMaxLongWord : Float;
bool : Boolean;
intzahl : LongInt;

begin
  // Bug 1 //
  minLongInt := Float(min(Longint)); // wrong value

  // Bug 2 //
  bool := runerr; // clear runerr
  betweenMaxLongIntAndMaxLongWord := 3000000000; // a value between max(LongInt) and max(Longword)
  intzahl := LongInt(betweenMaxLongIntAndMaxLongWord);
  bool := runerr; // runerr is false, true is right value, isn't it?
end main.
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 26
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: Bug report bei type casting

 · 
Gepostet: 15.05.2014 - 20:35 Uhr  ·  #4
Hallo Thomas,

bug fixed.

rolf
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   81   95 · Page-Gen-Time: 0.030129s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI