_fpreset

From RAD Studio
Jump to: navigation, search

Go Up to float.h Index


Header File

float.h

Prototype

void _fpreset(void);

Description

Reinitializes floating-point math package.

_fpreset reinitializes the floating-point math package. This function is usually used in conjunction with system or the exec... or spawn... functions. It is also used to recover from floating-point errors before calling longjmp.

Note: If an 80x87 coprocessor is used in a program a child process (executed by the system, or by an exec... or spawn... function) might alter the parent process' floating-point state.

  • If you use an 80x87 take the following precautions:
  • Do not call system or an exec... or spawn... function while a floating-point expression is being evaluated.

Call _fpreset to reset the floating-point state after using system exec... or spawn... if there is any chance that the child process performed a floating-point operation with the 80x87.

Return Value

None.

Portability

POSIX ANSI C ANSI C++ Win32 Win64 OS X
_fpreset +

Example

#include <process.h>
#include <float.h>
#include <stdio.h>

int safe_fpu_exec(wchar_t* program) {
	/* Spawn another process with NOWAIT flag */
	int pid = _wspawnl(P_NOWAIT, program, NULL);
	int exitCode;

	/* Check for error */
	if (pid == -1)
		return -1;

	/* Wait for the application to finish */
	cwait(&exitCode, pid, 0);

	/* Reset the FPU state since the child process might have altered it */
	_fpreset();

	return exitCode;
}