modf, modff, modfl
來自 cppreference.com
定義於標頭檔案 <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
|