Page 1 of 1

[Comp2] bug in pmachine

Posted: Mon May 15, 2006 9:41 pm
by Foundation
Zopas ontdekt: een bug in de Pmachine code (beetje laat ik weet het, maar zo gaat dat met bugs...) .

instructie: out r i

Als je de sources erbij neemt (out.cpp) vindt je op lijn 110 dat de output precisie van cout geset wordt. Na afloop van de instructie wordt de precisie echter niet hersteld. Gevolg: als je eenmaal de outputprecisie van een real set in je pcode, blijft die precisie behouden (ook als je verder enkel "out r" en niet "out r i" gebruikt).

Dit is merkbaar als je het volgende probeert:

Code: Select all

ldc r 3.1416
ldc i 2
out r i      (should be 3.1)
ldc r 3.1416
out r        (should be 3.1416)
de pmachine zal deze instructiereeks echter parsen en uitvoeren als:

Code: Select all

ldc r 3.1416
ldc i 2
out r i        ( result: 3.1 (OK) )
ldc r 3.1      ( !!!!! )
out r          ( result: 3.1 (ERROR) )

Posted: Tue May 16, 2006 9:57 am
by wem
zeker da da nen bug is, en geen feature? ;-)

Posted: Wed May 17, 2006 10:06 pm
by Foundation
Wel...

normaalgezien, als ge de volgende printf doet:

Code: Select all

printf ("Floats : %4.2f %+.0e %E \n", 3.1416, 3.1416, 3.1416);
zou da den output moeten geven (getest met ne visual studio):

Code: Select all

Floats : 3.14 +3e+000 3.141600E+000
Bovendien, als ik aan het begin van mijn programma 'out r i' gebruik, met een of andere precisie, verwacht ik niet als er 1000 statements later nog een 'out r' staat zonder precisie (van wie weet welke andere functie afkomstig), dat dan die oude precisie van totaal ergens anders behouden is gebleven...