Dec 242017
This program illustrates how floating point performance can be improved by taking advantage of the 80387/i486 trig functions. TP source code. | |||
---|---|---|---|
File Name | File Size | Zip Size | Zip Type |
TP387.DOC | 2640 | 1128 | deflated |
TP387.EXE | 10448 | 5783 | deflated |
TP387.PAS | 9641 | 2712 | deflated |
Download File TP387.ZIP Here
Contents of the TP387.DOC file
This program illustrates how floating point performance can be improved
by taking advantage of the 80387/i486 (and non-Intel 287 and 387)
trig functions. The 8087 and 80287 handled these functions in only the
most primitive way, requiring extensive coding to convert the partial
tangent and partial arctangent instructions into sin, cos, and arctan.
The program consists of several routines to replace the turbo pascal
runtime routines with routines taking advantage of the 387's fsin, fcos,
and fsincos instructions, and the 387's improved implementation of the
fptan and fpatan instructions.
ChangeSystemSinCos patches the tp run time routines to use the fsin and
fcos instructions. This has been tested on TP5.0 and TP6.0. The change
gives an improvement of about a factor of 4.
MySin and MyCos are replacement functions for the TP sin and cos functions,
and do not require the TP run time routines to be patched. They are somewhat
slower than the patched version.
MySinCos is a routine than computes both the sin and the cos of a single
argument. This is faster than computing the sin and cos independently.
Tan is a function than computes the tangent of an argument using the sin
and cos routines.
Tan387 computes the tangent using the 387 fptan instruction.
Arctan2 computes the arctangent of the quotent of two arguments, setting the
result into the correct quadrant (0 to 2pi) using the TP arctan function.
ArcTan387 computes the arctangent of the quotent of two arguments, setting
the result into the correct quadrant (0 to 2pi) using the 387 fpatan
instruction.
The rest of the program tests the accuracy of the various routines, and
test the speeds of the routines. The output of the program produced on
my Northgate 486/25 was:
Co-Processor 80387 detected.
fsin vs sin 1.110223E-0016
fcos vs cos 1.110223E-0016
fsincos vs sin 1.110223E-0016
fsincos vs cos 1.110223E-0016
arctan2 8.881784E-0016
tan 4.547474E-0013
type ticks time/op
TP sin/cos 138 75.824 usec
TP tan 148 81.319 usec
new sin/cos 54 29.670 usec
my sin/cos 67 36.813 usec
mysincos 40 21.978 usec
arctan2 79 43.407 usec
arctan387 37 20.330 usec
tan387 31 17.033 usec
Joseph R Ahlgren 2218 N Tuckahoe St Arlington, VA 22205
RBBS 703-241-7980 CompuServe 70461,2340
These routines may be freely distributed provided they are unmodified and
include the above attribution. I would appreciate any comments or
suggestions.
by taking advantage of the 80387/i486 (and non-Intel 287 and 387)
trig functions. The 8087 and 80287 handled these functions in only the
most primitive way, requiring extensive coding to convert the partial
tangent and partial arctangent instructions into sin, cos, and arctan.
The program consists of several routines to replace the turbo pascal
runtime routines with routines taking advantage of the 387's fsin, fcos,
and fsincos instructions, and the 387's improved implementation of the
fptan and fpatan instructions.
ChangeSystemSinCos patches the tp run time routines to use the fsin and
fcos instructions. This has been tested on TP5.0 and TP6.0. The change
gives an improvement of about a factor of 4.
MySin and MyCos are replacement functions for the TP sin and cos functions,
and do not require the TP run time routines to be patched. They are somewhat
slower than the patched version.
MySinCos is a routine than computes both the sin and the cos of a single
argument. This is faster than computing the sin and cos independently.
Tan is a function than computes the tangent of an argument using the sin
and cos routines.
Tan387 computes the tangent using the 387 fptan instruction.
Arctan2 computes the arctangent of the quotent of two arguments, setting the
result into the correct quadrant (0 to 2pi) using the TP arctan function.
ArcTan387 computes the arctangent of the quotent of two arguments, setting
the result into the correct quadrant (0 to 2pi) using the 387 fpatan
instruction.
The rest of the program tests the accuracy of the various routines, and
test the speeds of the routines. The output of the program produced on
my Northgate 486/25 was:
Co-Processor 80387 detected.
fsin vs sin 1.110223E-0016
fcos vs cos 1.110223E-0016
fsincos vs sin 1.110223E-0016
fsincos vs cos 1.110223E-0016
arctan2 8.881784E-0016
tan 4.547474E-0013
type ticks time/op
TP sin/cos 138 75.824 usec
TP tan 148 81.319 usec
new sin/cos 54 29.670 usec
my sin/cos 67 36.813 usec
mysincos 40 21.978 usec
arctan2 79 43.407 usec
arctan387 37 20.330 usec
tan387 31 17.033 usec
Joseph R Ahlgren 2218 N Tuckahoe St Arlington, VA 22205
RBBS 703-241-7980 CompuServe 70461,2340
These routines may be freely distributed provided they are unmodified and
include the above attribution. I would appreciate any comments or
suggestions.
December 24, 2017
Add comments