/ two-slash /
2/ : shift or division?
- description:
The ANS Forth (a.k.a. ISO Forth) defines 2/ as an arithmetic shift right,
but there are two unevident nuances.
First of all, 2/ is not the same as 2 /
Jerry Avins <jya@ieee.o**> wrote in the message <3CF7A052.75658F4B@ieee.org>:
[..]
> SwiftForth 2.2.2 09Mar2001
> 101 2 / . 50 ok
> 101 2/ . 50 ok
> -101 2 / . -50 ok
> -101 2/ . -51 ok
[..]
Look once more at the last two lines. 2/ rounds towards minus infinity,
while 2 / rounds towards zero.
At second, the ANS Forth document fails to give the right definition
of what an arithmetic shift right is:
> 6.1.0330 2/ "two-slash" CORE
> ( x1 -- x2 )
> x2 is the result of shifting x1 one bit toward the least-significant
> bit, leaving the most-significant bit unchanged.
This definition is ok for both tow's complement and one's complement
machines but is wrong for signed magnitude machines.
Andrew Haley <aph@*****************>
wrote in the message <ada1bg$2uu$2@hammerfield.cambridge.redhat.com>:
>
[...]
> The only sane way to do an arithmetic right shift on a sign-magnitude
> machine is a shift that doesn't involve the sign bit. The standard
> defintion of 2/ for such a machine is Just Plain Wrong.
>
> Andrew.
Two more examples of number representations some bits of which
must remain untouched are:
m_l_g3@yahoo.com (Michael L Gassanenko) wrote
in the message <b5ecdf44.0205310049.79efa6c3@posting.google.com>:
[...]
>
> 1) a system that represent integers as floating point numbers.
> I heard about at least one such system (IIRC pre-ANS).
>
> 2) a system that uses shadow bits for run-time type information.
> I use one such system as a cross-compiling host.
The 3rd realistic example of a system that uses an unusual number
representation is a Forth system implemented on a virtual machine
that supports big numbers (each number is represented with as many
bits as is needed), e.g. Forth on top of Scheme.
generated Wed Jul 23 02:53:41 2003mlg