---
title: fmod
description: "浮点数取模，即x模y。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_0249.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_0249.html
indexId: 690c803b0e509cc9a606079752c8652bc93bd38d0e909d9431bc7a7052dc22c061
---
# fmod

浮点数取模，即x模y。

#### 接口定义

C interface：

float fmodf(float x, float y);

double fmod(double x, double y);

long double fmodl(long double x, long double y);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| x | 在fmodf中，x是单精度浮点类型。 在fmod中，x是双精度浮点类型。 在fmodl中，x是长双精度浮点类型。 | 表示输入数据的浮点值。 | 输入 |
| y | 在fmodf中，y是单精度浮点类型。 在fmod中，y是双精度浮点类型。 在fmodl中，y是长双精度浮点类型。 | 表示输入数据的浮点值。 | 输入 |


#### 返回值

- 返回x模y的结果。
- 输入x为任意值，y为±0或nan，返回nan。
- 输入x为±0，y不为±0且y不是nan，返回±0。
- 输入x为±∞或者nan，y为任意值，返回nan。


#### 依赖

C: "km.h"


#### 示例

C interface：

```
// typical usage 
    float x1 = -1.0, x2 = 2.0, x3 = 3.0, x4 = 4.0;
    float y1 = 4.0, y2 = -4.0, y3 = -3.0, y4 = 3.0;
    // special handling 
    float a = 0.0, b = INFINITY, c = -INFINITY, d = NAN; 
    // print result 
    printf("fmodf(-1.0, 4.0) = %.6f\n", fmodf(x1, y1));
    printf("fmodf(2.0, -4.0) = %.6f\n", fmodf(x2, y2));
    printf("fmodf(3.0, -3.0) = %.6f\n", fmodf(x3, y3));
    printf("fmodf(4.0, 3.0) = %.6f\n", fmodf(x4, y4));
    printf("fmodf(1.0, 0.0) = %+.6f\n", fmodf(x1, a));
    printf("fmodf(INFINITY, 1.0) = %+.6f\n", fmodf(b, x1));
    printf("fmodf(-INFINITY, -1.0) = %+.6f\n", fmodf(c, -x1));
    printf("fmodf(1.0, -INFINITY) = %+.6f\n", fmodf(x1, c));
    printf("fmodf(1.0, NAN) = %+.6f\n", fmodf(x1, d));
    printf("fmodf(NAN, -1.0) = %+.6f\n", fmodf(d, -x1));

    /* 
     *  fmodf(-1.0, 4.0) = -1.000000
     *  fmodf(2.0, -4.0) = 2.000000
     *  fmodf(3.0, -3.0) = 0.000000
     *  fmodf(4.0, 3.0) = 1.000000
     *  fmodf(1.0, 0.0) = -nan
     *  fmodf(INFINITY, 1.0) = -nan
     *  fmodf(-INFINITY, -1.0) = -nan
     *  fmodf(1.0, -INFINITY) = +1.000000
     *  fmodf(1.0, NAN) = +nan
     *  fmodf(NAN, -1.0) = +nan
     * */
```
