在线文档教程
C++
数字 | Numerics

std::modf

STD::MODf

Defined in header
float modf( float x, float* iptr (1)
double modf( double x, double* iptr (2)
long double modf( long double x, long double* iptr (3)

1-3%29分解给定的浮点值x分为整数部分和分数部分,每个部分具有相同的类型和符号x将浮点格式%29中的整部分%28存储在iptr...

参数

x-floating point value
iptr-pointer to floating point value to store the integral part to

返回值

如果没有发生错误,则返回x有相同的标志x...将整部分计算到以下值中:iptr...

中存储的返回值和值之和。*iptr施予x%28允许舍入%29。

错误处理

中指定的任何错误均不受此函数的影响。数学[医]错误处理...

如果实现支持ieee浮点算法%28IEC 60559%29,

  • 如果x是±0,±0是返回,±0存储在*iptr...

  • 如果x是±∞,±0是返回,±∞存储在*iptr...

  • 如果x是NaN,NaN是返回的,NaN存储在*iptr...

  • 返回的值是准确的,当前舍入模式被忽略

注记

该函数的实现方式如下:

二次

double modf(double x, double* iptr) { #pragma STDC FENV_ACCESS ON int save_round = std::fegetround( std::fesetround(FE_TOWARDZERO *iptr = std::nearbyint(x std::fesetround(save_round return std::copysign(std::isinf(x) ? 0.0 : x - (*iptr), x }

二次

比较了不同的浮点分解函数。

二次

#include <iostream> #include <cmath> #include <limits> int main() { double f = 123.45; std::cout << "Given the number " << f << " or " << std::hexfloat << f << std::defaultfloat << " in hex,\n"; double f3; double f2 = std::modf(f, &f3 std::cout << "modf() makes " << f3 << " + " << f2 << '\n'; int i; f2 = std::frexp(f, &i std::cout << "frexp() makes " << f2 << " * 2^" << i << '\n'; i = std::ilogb(f std::cout << "logb()/ilogb() make " << f/std::scalbn(1.0, i) << " * " << std::numeric_limits<double>::radix << "^" << std::ilogb(f) << '\n'; // special values f2 = std::modf(-0.0, &f3 std::cout << "modf(-0) makes " << f3 << " + " << f2 << '\n'; f2 = std::modf(-INFINITY, &f3 std::cout << "modf(-Inf) makes " << f3 << " + " << f2 << '\n'; }

二次

可能的产出:

二次

Given the number 123.45 or 0x1.edccccccccccdp+6 in hex, modf() makes 123 + 0.45 frexp() makes 0.964453 * 2^7 logb()/ilogb() make 1.92891 * 2^6 modf(-0) makes -0 + -0 modf(-Inf) makes -INF + -0

二次

另见

trunc (C++11)nearest integer not greater in magnitude than the given value (function)

c MODEF文件

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/数值/数学/modf