remainder, remainderf, remainderl

来自cppreference.com
< c‎ | numeric‎ | math
 
 
 
常用数学函数
函数
基本运算
remainder
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
指数函数
(C99)
(C99)
(C99)
(C99)
幂函数
(C99)
(C99)
三角及双曲函数
(C99)
(C99)
(C99)
误差及伽马函数
(C99)
(C99)
(C99)
(C99)
临近整数的浮点运算
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
浮点数操作函数
(C99)
(C99)
(C99)
(C99)
分类
(C99)
(C99)
(C99)
宏常量
 
定义于头文件 <math.h>
float       remainderf( float x, float y );
(1) (C99 起)
double      remainder( double x, double y );
(2) (C99 起)
long double remainderl( long double x, long double y );
(3) (C99 起)
定义于头文件 <tgmath.h>
#define remainder( x, y )
(4) (C99 起)
1-3) 计算浮点除法运算x/y的IEEE剩余。
4) 通用类型宏:若任一参数拥有long double类型,则调用remainderl。否则若任一参数拥有整数类型或double类型,则调用remainder。否则调用remainderf

此函数计算的除法运算x/y的IEEE浮点剩余准确等于值x - n*y,其中n是最邻近x/y准确值的整数值。当|n-x/y| = ½时,选择偶数为值n

fmod()相反,返回值不保证与x拥有相同的符号。

若返回值为0,则它将拥有与x相同的符号。

目录

[编辑] 参数

x, y - 浮点值

[编辑] 返回值

若成功则返回定义于上的除法x/y的IEEE浮点剩余。

若发生定义域错误,则返回实现定义的值(若支持则为NaN)。

若发生因下溢的值域错误,则返回正确结果。

y为零,但不发生定义域错误,则返回零。

[编辑] 错误处理

错误以指定于math_errhandling的方式报告。

y为零则可能发生定义域错误。

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

  • 当前舍入模式无效果。
  • 决不引发FE_INEXACT,结果始终准确。
  • x为±∞且y非NaN,则返回NaN并引发FE_INVALID
  • y为±0且x非NaN,则返回NaN并引发FE_INVALID
  • 若任一参数为NaN,则返回NaN。

[编辑] 注意

POSIX要求x为无穷大或y是零则发生定义域错误。

fmod而非remainder适用于浮点类型到无符号整数类型的静默包装:(0.0 <= (y = fmod(rint(x), 65536.0)) ? y : 65536.0 + y)在范围[-0.0 .. 65535.0]内,它对应unsigned shortremainder(rint(x), 65536.0在范围[-32767.0, +32768.0]内,它在signed short范围之外。

[编辑] 示例

#include <stdio.h>
#include <math.h>
#include <fenv.h>
 
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf("remainder(+5.1, +3.0) = %.1f\n", remainder(5.1,3));
    printf("remainder(-5.1, +3.0) = %.1f\n", remainder(-5.1,3));
    printf("remainder(+5.1, -3.0) = %.1f\n", remainder(5.1,-3));
    printf("remainder(-5.1, -3.0) = %.1f\n", remainder(-5.1,-3));
 
    // 特殊值
    printf("remainder(-0.0, 1.0) = %.1f\n", remainder(-0.0, 1));
    printf("remainder(+5.1, Inf) = %.1f\n", remainder(5.1, INFINITY));
 
    // 错误处理
    feclearexcept(FE_ALL_EXCEPT);
    printf("remainder(+5.1, 0) = %.1f\n", remainder(5.1, 0));
    if(fetestexcept(FE_INVALID)) puts("    FE_INVALID raised");
}

输出:

remainder(+5.1, +3.0) = -0.9
remainder(-5.1, +3.0) = 0.9
remainder(+5.1, -3.0) = -0.9
remainder(-5.1, -3.0) = 0.9
remainder(+0.0, 1.0) = 0.0
remainder(-0.0, 1.0) = -0.0
remainder(+5.1, Inf) = 5.1
remainder(+5.1, 0) = -nan
    FE_INVALID raised

[编辑] 参考

  • C11 standard (ISO/IEC 9899:2011):
  • 7.12.10.2 The remainder functions (p: 254-255)
  • 7.25 Type-generic math <tgmath.h> (p: 373-375)
  • F.10.7.2 The remainder functions (p: 529)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.12.10.2 The remainder functions (p: 235)
  • 7.22 Type-generic math <tgmath.h> (p: 335-337)
  • F.9.7.2 The remainder functions (p: 465)

[编辑] 参阅

计算整数除法的商和余数
(函数) [编辑]

(C99)
(C99)
计算浮点除法运算的余数
(函数) [编辑]
(C99)
(C99)
(C99)
计算除法运算的带符号余数,以及商的后三位
(函数) [编辑]
remainderC++ 文档