Declaring Functions That Return Floating-Point Types

You can declare functions that return the floating-point types float, double, and long double. Functions that return types float or double do not place their return values in registers; they place their return values in a global location called the floating-point accumulator (__fac). Functions that return the type long double place their return values on the NDP stack (or numeric data processor stack), a simulated stack made up of registers in the math coprocessor.

In 32-bit programs, all functions that return floating-point values place their return values on the NDP stack. In addition, all functions that use the __fastcall calling convention and return floating-point values place their return values on the NDP stack.

Summary: You can write reentrant functions that return floating-point types.

Using the current thread's private stack to return values allows you to write reentrant functions by eliminating possible contention between threads for the floating-point accumulator.

Note:

You do not need to use the __pascal keyword with functions that return the type long double. There is no contention between threads for the NDP stack, because the operating system saves the values of the coprocessor's registers for each thread.