---
title: drem
description: "同时计算浮点x/y的余数。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/240RC2/accel/kunpengaccel_kml_16_0690.html
sourcePath: /source/zh/kunpengboostkithistory/240RC2/accel/kunpengaccel_kml_16_0690.html
indexId: fa60592a52eb3080204f0e1581b34e1c7b3d8c19e3d248edae42f9136b08b3e876
---
# drem

同时计算浮点x/y的余数。

即x = n * y + d，其中n为整数，|d| < y / 2；当|d| = |y| / 2时，要保证n为偶数。

#### 接口定义

C interface：

float dremf(float x, float y);

double drem(double x, double y);


#### 参数

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


#### 返回值

- 正常区间：返回x/y的余数。
- 特殊区间：

  - 输入|x|或者|y|为0或nan，输出nan。
  - 输入|x|为0，|y|不为0或者nan，输出±0。


#### 依赖

C: "km.h"


#### 示例

C interface：

```
// typical usage
double x1 = 3.0, x2 = 3.5;
double y1 = 4.0, y2 = 4.5;
// special handling
double e = INFINITY, f = -INFINITY, g = NAN;
// print result
printf("/*\n");
printf(" * drem(3.0, 4.0) = %.15f\n", drem(x1, y1));
printf(" * drem(3.5, 4.5) = %.15f\n", drem(x2, x2));
printf(" * drem(4.5, 4.5) = %.15f\n", drem(y2, y2));
printf(" * drem(INFINITY, 0) = %.15f\n", drem(e, 0.0f));
printf(" * drem(-INFINITY, 3.0) = %.15f\n", drem(f, x1));
printf(" * drem(NAN, 3.0) = %.15f\n", drem(g, x1));
printf(" * drem(NAN, INFINITY) = %.15f\n", drem(g, e));
printf(" **/\n");
/*
* drem(3.0, 4.0) = -1.000000000000000
* drem(3.5, 4.5) = 0.000000000000000
* drem(4.5, 4.5) = 0.000000000000000
* drem(INFINITY, 0) = nan
* drem(-INFINITY, 3.0) = nan
* drem(NAN, 3.0) = nan
* drem(NAN, INFINITY) = nan
**/
```
