[Comp2] bug in pmachine

Forum van 3de Bachelor Informatica.

Moderator: Praesidium

User avatar
Foundation
Posts: 622

[Comp2] bug in pmachine

Post#1 » Mon May 15, 2006 9:41 pm

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) )

wem
Posts: 93
Contact:

Post#2 » Tue May 16, 2006 9:57 am

zeker da da nen bug is, en geen feature? ;-)

User avatar
Foundation
Posts: 622

Post#3 » Wed May 17, 2006 10:06 pm

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...

Return to “3de Bachelor”

Who is online

Users browsing this forum: No registered users and 16 guests