Announcement, README, Makefile for IEEE calculator
sources-request at panda.UUCP
sources-request at panda.UUCP
Tue Sep 3 22:47:29 AEST 1985
Mod.sources: Volume 3, Issue 3
Submitted by: decvax!decwrl!sun!dgh!dgh (David Hough)
#! /bin/sh
: make a directory, cd to it, and run this through sh
echo If this kit is complete, "End of Kit" will echo at the end
echo Extracting announcement
cat >announcement <<'End-Of-File'
.de p
.PP
..
.de ts
.ds CH \\$1
.ds RH %
.ds LH D. Hough
.ds LF \\$3
.ds CF
.ds RF \\$2
.TL
\\$1
.AU
David Hough
..
.ce
Calculator for IEEE Floating Point Arithmetic
.p
Now that there is an approved IEEE standard for binary floating point
arithmetic, persons interested in implementing the standard may be interested to
learn of a software implementation of the standard available in the public domain.
This implementation, called the IEEE calculator, provides a way to test
your implementation in progress against a fairly complete implementation of the
standard as it was specified in 1980.
The IEEE calculator allows one to enter numbers in
decimal or hex notation, perform any of the operations specified by the standard, and
view the numerical results in decimal and hex as well as the exceptions signalled.
.p
The IEEE calculator is written entirely in Pascal and computes results a bit at
a time. Consequently the arithmetic is too slow to use for any significant
number of calculations but is ideal for debugging new implementations by providing
a comparison for results and exceptions.
.p
As public domain software the IEEE calculator is completely unsupported;
users bear the entire responsibility for determining its correctness for
and applicability to any specific purpose. The program implements the standard
as specified in 1980, but most subsequent changes in the standard are minor.
.p
Source code for
the IEEE calculator will be published on USENET, the Unix network,
in the newsgroup mod.sources, shortly after this announcement appears.
End-Of-File
echo Extracting ANNOUNCEMENT
cat >ANNOUNCEMENT <<'End-Of-File'
Calculator for IEEE Floating Point Arithmetic
Now that there is an approved IEEE standard for binary
floating point arithmetic, persons interested in implement-
ing the standard may be interested to learn of a software
implementation of the standard available in the public
domain. This implementation, called the IEEE calculator,
provides a way to test your implementation in progress
against a fairly complete implementation of the standard as
it was specified in 1980. The IEEE calculator allows one to
enter numbers in decimal or hex notation, perform any of the
operations specified by the standard, and view the numerical
results in decimal and hex as well as the exceptions sig-
nalled.
The IEEE calculator is written entirely in Pascal and
computes results a bit at a time. Consequently the arith-
metic is too slow to use for any significant number of cal-
culations but is ideal for debugging new implementations by
providing a comparison for results and exceptions.
As public domain software the IEEE calculator is com-
pletely unsupported; users bear the entire responsibility
for determining its correctness for and applicability to any
specific purpose. The program implements the standard as
specified in 1980, but most subsequent changes in the stan-
dard are minor.
Source code for the IEEE calculator will be published
on USENET, the Unix network, in the newsgroup mod.sources,
shortly after this announcement appears.
September 2, 1985
End-Of-File
echo Extracting readme
cat >readme <<'End-Of-File'
.de p
.PP
..
.de ts
.ds CH \\$1
.ds RH %
.ds LH D. Hough
.ds LF \\$3
.ds CF Company Confidential
.ds RF \\$2
.TL
\\$1
.AU
David Hough
..
.ce
Test Calculator for IEEE Floating Point Arithmetic
.p
The IEEE Calculator is a program for testing an implementation of the
IEEE Standard for Binary Floating-Point Arithmetic, drafted by IEEE
Working Group P754, and adopted by the IEEE in 1985.
It is primarily intended for the use of implementers in testing and
checking their work.
.p
NOTICE:
The IEEE Calculator was developed at Apple Computer in 1980 and modified
only slightly since then, although the IEEE standard has changed
somewhat since its 1980 draft. Apple Computer has donated the program to
the public domain. Consequently any person may use the program as
a public domain program, but in doing so takes the entire responsibility
for determining its appropriateness and correctness for any particular
use. Neither the author, nor Apple Computer, nor the IEEE support the
program or warrant it to be applicable or correct for any
particular purpose.
.sp 2
.ce
Use
.p
COMMANDS:
The IEEE calculator works like a reverse-Polish notation calculator.
Operands are entered, then commands. A particular entry is first
checked against the list of commands; if not a command, then it is
tested as a possible decimal number; then as a possible hex number.
.p
Multiple commands and operands may be entered on one line, separated
by semicolons:
.nf
Command: 2;sqrt;1;-
.fi
computes sqrt(2)-1 = .414...
.p
STACK:
Operands are pushed on a stack, and popped as they are consumed
by commands, which then push their results on the stack.
In the example above, if the stack was empty at
first, then it would contain only the result .414... at the end.
.p
When a new value is pushed on the stack, it is displayed in decimal
and hex floating point format. If any IEEE exception flags were
raised by the command that created the value, then they are displayed.
Abbreviations used are IV, OV, UN, D0, NO, and NX, for integer overflow,
floating point overflow, underflow, divide by zero, invalid operation,
and inexact result.
.p
DATA TYPES:
Stack entries are kept in an unrounded extended format. The unrounding
means that the round and sticky bits are visible in the hex format.
There are commands available to cause stack entries to be kept in
single, double, or rounded extended precision.
.p
HEX FLOATING POINT:
Stack entries are displayed in and may be entered in a hex floating
point notation, consiting of hex digits followed by a decimal exponent.
Thus
.nf
1
1H
.8h1
40h-6
.fill
are all ways of entering 1.0. Note that 100h100 means 256.0 * 2**100,
NOT 256.0 * 2**256!
.p
TESTING:
The command TEST places the calculator in a mode for performing
each computation twice, once with its built in arithmetic and
once with a user-defined arithmetic to be tested. For each
computational command, results and exception flags are computed
both ways and compared.
.sp 2
.ce
Setting up the IEEE Calculator
.p
The Calculator is distributed on USENET as a series of SHAR files.
When run, these create the necessary source files in a directory.
One of these files is a Makefile which can be used to make three
versions of the calculator.
The calctest version does NOT test any user-defined arithmetic.
Calc 32 and calc64 test single and double precision
floating point arithmetic in the Pascal compiler pc contained in
Release 2.0 of Sun Unix. These programs operate the same except when
in TEST mode.
.p
Getting the calculator to work in other environments is primarily
a matter of setting up the interface to the arithmetic to be tested.
This is a system-dependent matter, so have fun.
.p
If it is desired to get the program operational for its own sake
without any intent to test a local IEEE implementation, modify the
Makefile to only create calctest.
.sp 2
.ce
Commands
.p
Authoritative information on commands is to be gleaned, in the best
Unix tradition, from detailed examination of the source code.
.nf
TEST toggle mode to test user-supplied arithmetic
EXIT quit the program
STOX80 change calculator storage mode to rounded extended
STOF64 change calculator storage mode to IEEE double precision
STOF32 change calculator storage mode to IEEE single precision
STOI64 change calculator storage mode to 64 bit 2's complement integer
STOI32 change calculator storage mode to 32 bit 2's complement integer
STOI16 change calculator storage mode to 16 bit 2's complement integer
UNROUNDED change calculator storage mode to unrounded extended (default)
also change calculator rounding precision mode to 80 significant bits
R24 change calculator rounding precision mode to 24 significant bits
R53 change calculator rounding precision mode to 53 significant bits
RN change calculator rounding mode to round to nearest (default)
RM change calculator rounding mode to round toward minus infinity
RP change calculator rounding mode to round toward plus infinity
RZ change calculator rounding mode to round toward zero
AFF change calculator infinity mode to affine (default)
PROJ change calculator infinity mode to projective
NORM change calculator subnormal mode to normalizing (default)
WARN change calculator subnormal mode to warning
IV OV UN D0 NO NX
toggle the trap-enable for the corresponding exception
default is disabled
CLEAR clear stack
CRUNCH clear stack except for top two entries
DUP pop x, then push it twice
DUMP print out contents of entire stack
POP pop one operand
REV pop x and y, push in reverse order
E push an extended approximation to e
PI push an extended approximation to pi
ABS pop operand x, push abs(x)
NEG pop x, push -x
SQRT pop x, push sqrt(x)
TOF32 pop x, convert to IEEE single precision, push
TOF64 pop x, convert to IEEE double precision, push
TOX80 pop x, convert to rounded extended precision, push
TOF32I pop x, convert to IEEE single integral value, push
TOF64I pop x, convert to IEEE double integral value, push
TOX80I pop x, convert to extended integral value, push
TOI16 pop x, convert to 16 bit 2's complement integer, push
TOI32 pop x, convert to 32 bit 2's complement integer, push
TOI64 pop x, convert to 64 bit 2's complement integer, push
+ pop two operands, add, push result
- pop two operands, sub, push result
* pop two operands, mul, push result
/ pop two operands, div, push result
COMPARE pop x and y, push numerical result of comparison
DIV pop x and y, push integral quotient
REM pop x and y, push IEEE remainder from integral quotient
LOGB an IEEE appendix function, logb
NEXT an IEEE appendix function, nextafter
SCALE an IEEE appendix function, scalb
.fi
End-Of-File
echo Extracting README
cat >README <<'End-Of-File'
Test Calculator for IEEE Floating Point Arithmetic
The IEEE Calculator is a program for testing an imple-
mentation of the IEEE Standard for Binary Floating-Point
Arithmetic, drafted by IEEE Working Group P754, and adopted
by the IEEE in 1985. It is primarily intended for the use
of implementers in testing and checking their work.
NOTICE: The IEEE Calculator was developed at Apple Com-
puter in 1980 and modified only slightly since then,
although the IEEE standard has changed somewhat since its
1980 draft. Apple Computer has donated the program to the
public domain. Consequently any person may use the program
as a public domain program, but in doing so takes the entire
responsibility for determining its appropriateness and
correctness for any particular use. Neither the author, nor
Apple Computer, nor the IEEE support the program or warrant
it to be applicable or correct for any particular purpose.
Use
COMMANDS: The IEEE calculator works like a reverse-
Polish notation calculator. Operands are entered, then com-
mands. A particular entry is first checked against the list
of commands; if not a command, then it is tested as a possi-
ble decimal number; then as a possible hex number.
Multiple commands and operands may be entered on one
line, separated by semicolons:
Command: 2;sqrt;1;-
computes sqrt(2)-1 = .414...
STACK: Operands are pushed on a stack, and popped as
they are consumed by commands, which then push their results
on the stack. In the example above, if the stack was empty
at first, then it would contain only the result .414... at
the end.
When a new value is pushed on the stack, it is
displayed in decimal and hex floating point format. If any
IEEE exception flags were raised by the command that created
the value, then they are displayed. Abbreviations used are
IV, OV, UN, D0, NO, and NX, for integer overflow, floating
point overflow, underflow, divide by zero, invalid opera-
tion, and inexact result.
DATA TYPES: Stack entries are kept in an unrounded
extended format. The unrounding means that the round and
sticky bits are visible in the hex format. There are com-
mands available to cause stack entries to be kept in single,
double, or rounded extended precision.
HEX FLOATING POINT: Stack entries are displayed in and
September 2, 1985
- 2 -
may be entered in a hex floating point notation, consiting
of hex digits followed by a decimal exponent. Thus
1
1H
.8h1
40h-6
are all ways of entering 1.0. Note that 100h100 means 256.0
* 2**100, NOT 256.0 * 2**256!
TESTING: The command TEST places the calculator in a
mode for performing each computation twice, once with its
built in arithmetic and once with a user-defined arithmetic
to be tested. For each computational command, results and
exception flags are computed both ways and compared.
Setting up the IEEE Calculator
The Calculator is distributed on USENET as a series of
SHAR files. When run, these create the necessary source
files in a directory. One of these files is a Makefile
which can be used to make three versions of the calculator.
The calctest version does NOT test any user-defined arith-
metic. Calc 32 and calc64 test single and double precision
floating point arithmetic in the Pascal compiler pc con-
tained in Release 2.0 of Sun Unix. These programs operate
the same except when in TEST mode.
Getting the calculator to work in other environments is
primarily a matter of setting up the interface to the arith-
metic to be tested. This is a system-dependent matter, so
have fun.
If it is desired to get the program operational for its
own sake without any intent to test a local IEEE implementa-
tion, modify the Makefile to only create calctest.
Commands
Authoritative information on commands is to be gleaned,
in the best Unix tradition, from detailed examination of the
source code.
TEST toggle mode to test user-supplied arithmetic
EXIT quit the program
STOX80 change calculator storage mode to rounded extended
STOF64 change calculator storage mode to IEEE double precision
STOF32 change calculator storage mode to IEEE single precision
STOI64 change calculator storage mode to 64 bit 2's complement integer
STOI32 change calculator storage mode to 32 bit 2's complement integer
STOI16 change calculator storage mode to 16 bit 2's complement integer
UNROUNDED change calculator storage mode to unrounded extended (default)
also change calculator rounding precision mode to 80 significant bits
September 2, 1985
- 3 -
R24 change calculator rounding precision mode to 24 significant bits
R53 change calculator rounding precision mode to 53 significant bits
RN change calculator rounding mode to round to nearest (default)
RM change calculator rounding mode to round toward minus infinity
RP change calculator rounding mode to round toward plus infinity
RZ change calculator rounding mode to round toward zero
AFF change calculator infinity mode to affine (default)
PROJ change calculator infinity mode to projective
NORM change calculator subnormal mode to normalizing (default)
WARN change calculator subnormal mode to warning
IV OV UN D0 NO NX
toggle the trap-enable for the corresponding exception
default is disabled
CLEAR clear stack
CRUNCH clear stack except for top two entries
DUP pop x, then push it twice
DUMP print out contents of entire stack
POP pop one operand
REV pop x and y, push in reverse order
E push an extended approximation to e
PI push an extended approximation to pi
ABS pop operand x, push abs(x)
NEG pop x, push -x
SQRT pop x, push sqrt(x)
TOF32 pop x, convert to IEEE single precision, push
TOF64 pop x, convert to IEEE double precision, push
TOX80 pop x, convert to rounded extended precision, push
TOF32I pop x, convert to IEEE single integral value, push
TOF64I pop x, convert to IEEE double integral value, push
TOX80I pop x, convert to extended integral value, push
TOI16 pop x, convert to 16 bit 2's complement integer, push
TOI32 pop x, convert to 32 bit 2's complement integer, push
TOI64 pop x, convert to 64 bit 2's complement integer, push
+ pop two operands, add, push result
- pop two operands, sub, push result
* pop two operands, mul, push result
/ pop two operands, div, push result
COMPARE pop x and y, push numerical result of comparison
DIV pop x and y, push integral quotient
REM pop x and y, push IEEE remainder from integral quotient
LOGB an IEEE appendix function, logb
NEXT an IEEE appendix function, nextafter
SCALE an IEEE appendix function, scalb
September 2, 1985
End-Of-File
echo Extracting Makefile
cat >Makefile <<'End-Of-File'
PASCAL = pc -c -L -w -g
PASCALGO = pc -L -g
OBJSTEST = calc.o calctest.o
OBJS32 = calc.o calcf32.o
OBJS64 = calc.o calcf64.o
calc: calctest calc32 calc64
calctest: $(OBJSTEST)
$(PASCALGO) $(OBJSTEST) $(LIBS) -o calctest
calc32: $(OBJS32)
$(PASCALGO) $(OBJS32) $(LIBS) -o calc32
calc64: $(OBJS64)
$(PASCALGO) $(OBJS64) $(LIBS) -o calc64
calctest.o: calctest.p calctest.h sane.h oldfplib.h
$(PASCAL) calctest.p
calcf32.o: calcf32.p calctest.h sane.h oldfplib.h calcsingle.h
$(PASCAL) calcf32.p
calcf64.o: calcf64.p calctest.h sane.h oldfplib.h calcdouble.h
$(PASCAL) calcf64.p
calc.o: calc.p dotest.i sane.h oldfplib.h calctest.h global.i forward.i init.i divrem.i extra.i storage.i addsubpas.i utility.i function.i hex.i base.i calcdouble.h calcsingle.h
$(PASCAL) calc.p
End-Of-File
echo ""
echo "End of Kit"
exit
More information about the Mod.sources
mailing list