Floating-Point Support
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer

Floating-Point Support 

Many Microsoft run-time library functions require floating-point support from a math coprocessor or from the floating-point libraries that accompany the compiler. Floating-point support functions are loaded only if required.

When you use a floating-point type specifier in the format string of a call to a function in the printf or scanf family, you must specify a floating-point value or a pointer to a floating-point value in the argument list to tell the compiler that floating-point support is required.

To handle floating-point exceptions, refer to the sample code in the _fpieee_flt topic.

Floating-point precision of intermediate values are controlled by the functions _control87, _controlfp, __control87_2. By default, _controlfp's precision control is set to 53 bits (_PC_53). Linking with FP10.OBJ changes the default precision control to 64 bits (_PC_64). On the linker command line, FP10.OBJ must appear before LIBC.LIB, LIBCMT.LIB, or MSVCRT.LIB.

Floating-Point Functions
Routine Use .NET Framework equivalent


Return absolute value of int


acos, acosf

Calculate arccosine


asin, asinf

Calculate arcsine


atan, atanf, atan2, atan2f

Calculate arctangent

System::Math::Atan, System::Math::Atan2

atof, _atof_l, _wtof, _wtof_l

Convert character string to double-precision floating-point value

System::Convert::ToSingle, System::Convert::ToDouble

Bessel functions

Calculate Bessel functions _j0, _j1, _jn, _y0, _y1, _yn

Not applicable. To call the standard C function, use PInvoke. For more information, see Platform Invoke Examples.


Find absolute value of complex number

Not applicable.

ceil, ceilf

Find integer ceiling


_chgsign, _chgsignl

Reverse sign of double-precision floating-point or long double-precision floating-point argument

Not applicable.

_clear87, _clearfp

Get and clear floating-point status word

Not applicable.

_control87, _controlfp, __control87_2, _controlfp_s

Get old floating-point control word and set new control-word value

Not applicable.

_copysign, _copysignl

Return one value with sign of another

Not applicable.

cos, cosf, cosh, coshf

Calculate cosine

System::Math::Cos, System::Math::Cosh


Compute difference between two specified time values



Divide one integer by another, returning quotient and remainder

Not applicable.

_ecvt, _ecvt_s

Convert double to character string of specified length


exp, expf

Calculate exponential function


fabs, fabsf

Find absolute value


_fcvt, _fcvt_s

Convert double to string with specified number of digits following decimal point



Determine whether given double-precision floating-point value is finite


floor, floorf

Find largest integer less than or equal to argument


fmod, fmodf

Find floating-point remainder



Return status word containing information on floating-point class

System::Double::IsInfinity, System::Double::IsNegativeInfinity, System::Double::IsPositiveInfinity, System::Double::IsNan


Invoke user-defined trap handler for IEEE floating-point exceptions

Not applicable.


Reinitialize floating-point math package



Calculate exponential value

Not applicable.

_gcvt, _gcvt_s

Convert floating-point value to character string


_hypot, hypotf

Calculate hypotenuse of right triangle

Not applicable.


Check given double-precision floating-point value for not a number (NaN)



Return absolute value of long



Calculate product of argument and 2 to specified power



Divide one long integer by another, returning quotient and remainder

Not applicable.

log, logf, log10, log10f

Calculate natural or base-10 logarithm.

System::Math::Log, System::Math::Log10


Extract exponential value of double-precision floating-point argument

Not applicable.

_lrotl, _lrotr

Shift unsigned long int left (_lrotl) or right (_lrotr)

Not applicable.


Handle math errors

Not applicable.


Return larger of two values



Return smaller of two values


modf, modff

Split argument into integer and fractional parts

Not applicable.


Return next representable neighbor

Not applicable.

pow, powf

Calculate value raised to a power


printf, _printf_l, wprintf, _wprintf_l, printf_s, _printf_s_l, wprintf_s, _wprintf_s_l

Write data to stdout according to specified format

System::Console::Write, System::Console::WriteLine

rand, rand_s

Get pseudorandom number

System::Random Class

_rotl, _rotr

Shift unsigned int left (_rotl) or right (_rotr)

Not applicable.


Scale argument by power of 2

Not applicable.

scanf, wscanf, scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l

Read data from stdin according to specified format and write data to specified location

System::Console::Read, System::Console::ReadLine


set new control-word value

Not applicable.

sin, sinf, sinh, sinhf

Calculate sine or hyperbolic sine

System::Math::Sin, System::Math::Sinh


Find square root



Initialize pseudorandom series

System::Random Class

_status87, _statusfp, _statusfp2

Get floating-point status word

Not applicable.

strtod, _strtod_l, wcstod, _wcstod_l

Convert character string to double-precision value


tan, tanf, tanh, tanhf

Calculate tangent or hyperbolic tangent

System::Math::Tan, System::Math::Tanh

© 2015 Microsoft