modf, modff, modfl

来自cppreference.com
< c‎ | numeric‎ | math
 
 
 
常用数学函数
函数
基本运算
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
最大/最小运算
(C99)
(C99)
指数函数
(C23)
(C99)
(C99)
(C23)
(C23)

(C99)
(C99)(C23)
(C23)
(C23)
幂函数
(C99)
(C23)
(C23)

(C99)
(C23)
(C23)
三角及双曲函数
(C23)
(C23)
(C23)
(C23)
(C99)
(C99)
(C99)
浮点数的临近整数
(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
浮点数操作
(C99)(C99)
(C99)(C23)
(C99)
窄化运算
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量与量指数函数
十进制重编码函数
全序与载荷函数
分类
误差及伽马函数
(C99)
(C99)
(C99)
(C99)
类型
宏常量
特殊浮点数值
(C99)(C23)
参数与返回值
错误处理
快速运算指示
 
在标头 <math.h> 定义
float       modff(float arg, float* iptr );
(1) (C99 起)
double      modf(double arg, double* iptr );
(2)
longdouble modfl(longdouble arg, longdouble* iptr );
(3) (C99 起)
1-3) 分解给定的浮点数 arg 为整数和分数部分,每个都拥有与 arg 相同的类型和符号。(以浮点数格式)存储整数部分于 iptr 所指向的对象。

目录

[编辑]参数

arg - 浮点数
iptr - 指向要存储整数部分的目标的浮点数的指针

[编辑]返回值

若不出现错误,则返回与 arg 相同符号的 arg 小数部分。将整数部分放进 iptr 所指向的值。

返回值和存储于 *iptr 的值的和给出 arg(允许舍入)。

[编辑]错误处理

此函数不受制于任何指定于 math_errhandling 的错误。

若实现支持 IEE 浮点数算术(IEC 60559),则

  • arg 为 ±0,则返回 ±0,并存储 ±0 于 *iptr
  • arg 为 ±∞,则返回 ±0,并存储 ±∞ 于 *iptr
  • arg 为 NaN,则返回 NaN,并存储 NaN 于 *iptr
  • 返回值是准确的,忽略当前舍入模式

[编辑]注解

此函数表现为如同实现如下:

double modf(double value, double*iptr){#pragma STDC FENV_ACCESS ONint save_round =fegetround();fesetround(FE_TOWARDZERO);*iptr = std::nearbyint(value);fesetround(save_round);returncopysign(isinf(value)?0.0: value -(*iptr), value);}

[编辑]示例

#include <float.h>#include <math.h>#include <stdio.h>   int main(void){double f =123.45;printf("给定数值 %.2f 十六进制为 %a,\n", f, f);   double f3;double f2 = modf(f, &f3);printf("modf() 计算 %.2f + %.2f\n", f3, f2);   int i; f2 =frexp(f, &i);printf("frexp() 计算 %f * 2^%d\n", f2, i);   i =ilogb(f);printf("logb()/ilogb() 计算 %f * %d^%d\n", f /scalbn(1.0, i), FLT_RADIX, i);   // 特殊值 f2 = modf(-0.0, &f3);printf("modf(-0) 计算 %.2f + %.2f\n", f3, f2); f2 = modf(-INFINITY, &f3);printf("modf(-Inf) 计算 %.2f + %.2f\n", f3, f2);}

可能的输出:

给定数值 123.45 十六进制为 0x1.edccccccccccdp+6, modf() 计算 123.00 + 0.45 frexp() 计算 0.964453 * 2^7 logb()/ilogb() 计算 1.92891 * 2^6 modf(-0) 计算 -0.00 + -0.00 modf(-Inf) 计算 -INF + -0.00

[编辑]引用

  • C23 标准(ISO/IEC 9899:2024):
  • 7.12.6.12 The modf functions (第 TBD 页)
  • F.10.3.12 The modf functions (第 TBD 页)
  • C17 标准(ISO/IEC 9899:2018):
  • 7.12.6.12 The modf functions (第 TBD 页)
  • F.10.3.12 The modf functions (第 TBD 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 7.12.6.12 The modf functions (第 246-247 页)
  • F.10.3.12 The modf functions (第 523 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 7.12.6.12 The modf functions (第 227 页)
  • F.9.3.12 The modf functions (第 460 页)
  • C89/C90 标准(ISO/IEC 9899:1990):
  • 4.5.4.6 The modf function

[编辑]参阅

(C99)(C99)(C99)
取整到绝对值不大于给定值的最接近整数
(函数)[编辑]
modf 的 C++ 文档
close