> >Only guessing because I can't try this until I get home, but when n
> >reaches the value 2.9999....  (the nearest it'll get to 3.00
because
> >0.01 is not represented exactly internally [that would need an
infinite
> >number of bits]), then PRINT n  will round up to 3, whereas INT(n)
will
> >return the correct answer (2) which needs no rounding and therefore
> >prints as 2.
>
> Print returns 3 because of rounding of the QL float precision of >9
digits
> to 7 digits available for printing. INT operates directly from QL
float
> format and will therefore give the right result: 2. This will again
be
> rounded to 7 digitsby print but obviously 2.0000000 = 2.000000 so
nothing
> will change.

SMSQ/E, and I think Qdos also, operates with (at least) four
different rounding schemes:

1) PRINT 2.999999            prints 3            (6 decimals)
This affects the display only, not the maths

2) x$ = x: PRINT x$                prints 2.999999, but
x = 2.9999999: x$ = x: PRINT x$    prints 3! (7 d)
This rounding takes place during conversion to ascii

 x = 2.99999: PRINT x        prints the expected 2.99999 (5 d)
3) PRINT INT(x)                prints 2
4) x% = x: PRINT x%         prints 3

 x = -2.99999: PRINT x      prints the expected -2.99999
3) PRINT INT(x)                prints -3
4) x% = x: PRINT x%         prints -3

Thus INT truncates to next _smaller_ integer, coercion rounds to
_nearest_ integer. (For integers, method 4 is thus more precise.)


Per




Reply via email to