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