名稱空間
變體
操作

modf, modff, modfl

來自 cppreference.com
< c‎ | 數值‎ | 數學
 
 
 
常用數學函式
函式
基本操作
(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)
(C99)

(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
浮點數操作
(C99)(C99)
(C99)(C23)
(C99)
modf
(C23)(C23)
窄化操作
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量子與量子指數
十進位制重新編碼函式
總序和載荷函式
分類
(C99)
(C99)
(C99)
(C23)
誤差函式和伽馬函式
(C99)
(C99)
(C99)
(C99)
型別
宏常量
特殊浮點值
(C99)(C23)
引數和返回值
錯誤處理
快速操作指示符
 
定義於標頭檔案 <math.h>
float modff( float arg, float* iptr );
(1) (C99 起)
double modf( double arg, double* iptr );
(2)
long double modfl( long double arg, long double* iptr );
(3) (C99 起)
1-3) 將給定的浮點值 arg 分解為整數部分和小數部分,每個部分都具有與 arg 相同的型別和符號。整數部分(以浮點格式)儲存在 iptr 指向的物件中。

目錄

[編輯] 引數

arg - 浮點值
iptr - 指向儲存整數部分的浮點值的指標

[編輯] 返回值

如果沒有錯誤發生,返回 arg 的小數部分,其符號與 arg 相同。整數部分儲存在 iptr 指向的值中。

返回的值與儲存在 *iptr 中的值之和等於 arg(允許舍入)。

[編輯] 錯誤處理

此函式不受 math_errhandling 中指定的任何錯誤的影響。

如果實現支援 IEEE 浮點運算 (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 ON
    int save_round = fegetround();
    fesetround(FE_TOWARDZERO);
    *iptr = std::nearbyint(value);
    fesetround(save_round);
    return copysign(isinf(value) ? 0.0 : value - (*iptr), value);
}

[編輯] 示例

#include <float.h>
#include <math.h>
#include <stdio.h>
 
int main(void)
{
    double f = 123.45;
    printf("Given the number %.2f or %a in hex,\n", f, f);
 
    double f3;
    double f2 = modf(f, &f3);
    printf("modf() makes %.2f + %.2f\n", f3, f2);
 
    int i;
    f2 = frexp(f, &i);
    printf("frexp() makes %f * 2^%d\n", f2, i);
 
    i = ilogb(f);
    printf("logb()/ilogb() make %f * %d^%d\n", f / scalbn(1.0, i), FLT_RADIX, i);
 
    // special values
    f2 = modf(-0.0, &f3);
    printf("modf(-0) makes %.2f + %.2f\n", f3, f2);
    f2 = modf(-INFINITY, &f3);
    printf("modf(-Inf) makes %.2f + %.2f\n", f3, f2);
}

可能的輸出

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

[編輯] 參考

  • C23 標準 (ISO/IEC 9899:2024)
  • 7.12.6.12 modf 函式 (p: TBD)
  • F.10.3.12 modf 函式 (p: TBD)
  • C17 標準 (ISO/IEC 9899:2018)
  • 7.12.6.12 modf 函式 (p: TBD)
  • F.10.3.12 modf 函式 (p: TBD)
  • C11 標準 (ISO/IEC 9899:2011)
  • 7.12.6.12 modf 函式 (p: 246-247)
  • F.10.3.12 modf 函式 (p: 523)
  • C99 標準 (ISO/IEC 9899:1999)
  • 7.12.6.12 modf 函式 (p: 227)
  • F.9.3.12 modf 函式 (p: 460)
  • C89/C90 標準 (ISO/IEC 9899:1990)
  • 4.5.4.6 modf 函式

[編輯] 另請參閱

(C99)(C99)(C99)
將數字截斷到最接近的整數,其絕對值不大於給定值
(函式) [編輯]
C++ 文件 關於 modf