Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Conklin E.K.Forth programmer's handbook.2000.pdf
Скачиваний:
321
Добавлен:
23.08.2013
Размер:
2.04 Mб
Скачать

 

 

 

Forth Programmer’s Handbook

FROUND

( F: r1 — r2 )

Floating

 

Round r1 to the nearest integral value, giving r2. “F-round”

FSQRT

( F: r1 — r2 )

Floating Ext

 

Return r2, the square root of r1. An error may occur if r1 is less than zero.

 

“F-square-root”

 

 

3.8.8

Floating-Point Conditionals

 

Conditional tests of floating-point numbers consume their argument(s) on the floating-point stack and return a truth flag to the data stack. The word F~ provides both exact and near-equality testing. F~ is usually preferable to F0=, since a floating-point number may fail to be zero by an infinitesimal amount.

Glossary

 

 

F0<

( — flag ); ( F: r — )

Floating

 

Return true if and only if r is less than zero. “F-zero-less-than”

 

F0=

( — flag ); ( F: r — )

Floating

 

Return true if and only if r is exactly equal to zero. (See the definition of F~

 

below.) “F-zero-equals”

 

F<

( — flag ); ( F: r1 r2 — )

Floating

 

Return true if and only if r1 is less than r2. “F-less-than”

 

F~

( — flag ); ( F: r1 r2 r3 — )

Floating Ext

Test for equality or near equality, on an absolute or relative basis. If the increment r3 is positive, return true if and only if the absolute value of [r1 - r2] is less than r3. If the increment r3 is zero, return true if and only if r1 and r2 are exactly identical (be aware that some implementations may encode positive zero and negative zero differently). If the increment r3 is negative, return true if and only if the absolute value of [r1 - r2] is less than the absolute value of r3 times the sum of the absolute values of r1 and r2. “F-proximate”

System Functions 111

Forth Programmer’s Handbook

3.8.9 Logarithmic and Trigonometric Functions

The words in this section provide a full set of logarithmic, exponential, and trigonometric functions. All angles are in radians. The function FSINCOS is a little unusual; it returns the sine and the cosine of the given angle (cosine on top). FSINCOS and FATAN2 are complementary operators that convert angles to 2-vectors and vice versa. They correctly handle the conversion even when the tangent of the angle would be infinite. The pair of values returned by FSINCOS are a Cartesian unit 2-vector in the direction of the given angle, measured counter-clockwise from the positive X-axis. FATAN2 takes arguments in the same order, converting a 2-vector back to a scalar angle; for all principal angles (-pi to +pi radians), the phrase FSINCOS FATAN2 is an identity operation within the accuracy and range of the operators. The phrase FSINCOS F/ is functionally equivalent to FTAN, but is useful only over a limited range of angles, whereas FSINCOS and FATAN2 are useful for all angles.

Glossary

FACOS

( F: r1 — r2 )

Floating Ext

 

Return r2, the principal radian angle (zero to +pi) whose cosine is r1. “F-A-cos”

FACOSH

( F: r1 — r2 )

Floating Ext

 

Return r2, the floating-point value whose hyperbolic cosine is r1. “F-A-cosh”

FALOG

( F: r1 — r2 )

Floating Ext

 

Raise 10 to the power r1, giving r2. “F-A-log”

 

FASIN

( F: r1 — r2 )

Floating Ext

 

Return r2, the principal radian angle (-pi/2 to +pi/2) whose sine is r1. “F-A-sine”

FASINH

( F: r1 — r2 )

Floating Ext

 

Return r2, the floating-point value whose hyperbolic sine is r1. “F-A-sine-H”

FATAN

( F: r1 — r2 )

Floating Ext

 

Return r2, the principal radian angle (-pi/2 to +pi/2) whose tangent is r1.

 

“F-A-tan”

 

FATAN2

( F: r1 r2 — r3 )

Floating Ext

Return r3, the principal radian angle (-pi to +pi) whose tangent is r1/r2. The

112 System Functions

Forth Programmer’s Handbook

values r1 and r2 may be, but need not be, components of a unit vector. An error will occur if both r1 and r2 are zero (vector of zero magnitude). “F-A-tan-two”

FATANH

( F: r1 — r2 )

Floating Ext

 

Return r2, the floating-point value whose hyperbolic tangent is r1. “F-A-tan-H”

FCOS

( F: r1 — r2 )

Floating Ext

 

Return r2, the cosine of the radian angle r1. “F-cos”

FCOSH

( F: r1 — r2 )

Floating Ext

 

Return r2, the hyperbolic cosine of r1. “F-cosh”

FEXP

( F: r1 — r2 )

Floating Ext

 

Raise e (2.71828…) to the power r1, giving r2. “F-E-X-P”

FEXPM1

( F: r1 — r2 )

Floating Ext

 

Raise e (2.71828…) to the power r1 and subtract one, giving r2. This function

 

provides increased accuracy over FEXP when the argument r1 is close to zero.

 

“F-E-X-P-M-one”

 

FLN

( F: r1 — r2 )

Floating Ext

 

Return r2, the natural logarithm of r1. “F-L-N”

FLNP1

( F: r1 — r2 )

Floating Ext

 

Return r2, the natural logarithm of (1 + r1). This function provides increased

 

accuracy over FLN when its argument r1 is close to zero. “F-L-N-P-one”

FLOG

( F: r1 — r2 )

Floating Ext

 

Return r2, the base-ten logarithm of r1. “F-log”

FSIN

( F: r1 — r2 )

Floating Ext

 

Return r2, the sine of the radian angle r1.

“F-sine”

FSINCOS

( F: r1 — r2 r3 )

Floating Ext

 

Return r2 (sine) and r3 (cosine) of the radian angle r1. “F-sine-cos”

FSINH

( F: r1 — r2 )

Floating Ext

 

Return r2, the hyperbolic sine of r1. “F-sine-H”

System Functions 113

Forth Programmer’s Handbook

 

 

FTAN

( F: r1

— r2 )

Floating Ext

 

Return r2, the tangent of the radian angle r1. “F-tan”

 

FTANH

( F: r1

— r2 )

Floating Ext

 

Return r2, the hyperbolic tangent of r1. “F-tan-H”

 

3.8.10 Address Management

The floating-point command set introduces three new data types: internal floating point, 32-bit IEEE single-precision floating point, and 64-bit IEEE dou- ble-precision floating point. An application creating data structures using any of these types should use the support words described in this section to manage the address space. For example, the length of an internal floating-point number should always be referred to indirectly with words such as FLOAT+ or FLOATS, since the size may vary in different implementations.

When defining custom data structures, be aware that CREATE does not necessarily leave the data-space pointer aligned for the various floating-point data types. You can ensure alignment by explicitly specifying it both at compile time and execution time. An example from Standard Forth is:

: FCONSTANT ( F:

r -- )

CREATE

FALIGN

HERE

1 FLOATS ALLOT

F!

DOES> ( F:

- r)

FALIGNED F@ ;

In this example, the FALIGN after CREATE ensures that the address returned by HERE is float-aligned for the F! operation. FALIGN may have needed to reserve extra data space to do this, so, when an example of FCONSTANT is executed (using the code following DOES>) and the example’s address is returned, the word FALIGNED is needed to skip over that same space (if any) and access the floating-point value properly with F@.

In many implementations, alignment of floating-point data types requires nothing more than ordinary cell alignment, in which case, words such as FALIGN and FALIGNED may simply be aliases for ALIGN and ALIGNED. An application should not rely on this equivalence, however, and should use the floating-point words in this section.

114 System Functions

 

 

 

 

Forth Programmer’s Handbook

 

 

 

 

 

Glossary

 

 

 

FALIGN

( — )

Floating

 

 

If the data-space pointer is not float aligned, reserve enough data space to

 

 

make it so. “F-align”

 

 

FALIGNED

( addr — f-addr )

Floating

 

 

Return f-addr, the first float-aligned address equal to or greater than addr.

 

 

“F-aligned”

 

 

FLOAT+

( f-addr1 — f-addr2 )

Floating

 

 

Add the size in bytes of a floating-point number to f-addr1, giving f-addr2.

 

 

“float-plus”

 

 

FLOATS

( n1 — n2 )

Floating

 

 

Return n2, the size in bytes of n1 internal floating-point numbers.

DFALIGN

( — )

Floating Ext

 

 

If the data-space pointer is not double-float aligned, reserve enough data space

 

 

to make it so. “D-F-align”

 

DFALIGNED

( addr — df-addr )

Floating Ext

 

 

Return df-addr, the first double-float-aligned address equal to or greater than

 

 

addr. “D-F-aligned”

 

 

DFLOAT+

( df-addr1 — df-addr2 )

Floating Ext

 

 

Add the size in bytes of a 64-bit IEEE double-precision floating-point number

 

 

to df-addr1, giving df-addr2. “D-float-plus”

 

DFLOATS

( n1 — n2 )

Floating Ext

 

 

Return n2, the size in bytes of n1 64-bit IEEE double-precision floating-point

 

 

numbers. “D-floats”

 

 

SFALIGN

( — )

Floating Ext

 

 

If the data-space pointer is not single-float aligned, reserve enough data space

 

 

to make it so. “S-F-align”

 

SFALIGNED

( addr — sf-addr )

Floating Ext

Return sf-addr, the first single-float-aligned address equal to or greater than addr. “S-F-aligned”

System Functions 115

Соседние файлы в предмете Электротехника