---
title: remquo
description: "同时计算浮点x/y的商和余数，其中商对INT_MAX取余，余数的计算和remainder保持一致。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/240RC2/accel/kunpengaccel_kml_16_0692.html
sourcePath: /source/zh/kunpengboostkithistory/240RC2/accel/kunpengaccel_kml_16_0692.html
indexId: b17e3cdbd5c830f1e4a2a9ec776371e80c80c3cbacccdfe6c71af88b991ded4b76
---
# remquo

同时计算浮点x/y的商和余数，其中商对INT_MAX取余，余数的计算和remainder保持一致。

#### 接口定义

C interface：

float remquof(float x, float y, int *quo);

double remquo(double x, double y, int *quo);

long double remquol(long double x, long double y, int *quo);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| x | 在remquof中，x是单精度浮点类型。 在remquo中，x是双精度浮点类型。 在remquol中，x是长双精度浮点类型。 | 表示输入数据的浮点值。 | 输入 |
| y | 在remquof中，y是单精度浮点类型。 在remquo中，y是双精度浮点类型。 在remquol中，y是长双精度浮点类型。 | 表示输入数据的浮点值。 | 输入 |
| quo | 在remquof中，quo是int\*整型。 在remquo中，quo是int\*整型。 在remquol中，quo是int\*整型。 | 表示输出数据的值。 | 输出 |


#### 返回值

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

  - 输入|y|为0或nan，或者|x|为nan或inf，输出quo=0，返回nan。
  - 输入|y|为0，或者|y|为inf，输出quo=0，返回x。


#### 依赖

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
double rem;
int quo;
printf("/*\n");
rem = remquo(x1, y1, &quo);
printf(" * remquo(3.0, 4.0) = %.15f, %d\n", rem, quo);
rem = remquo(x2, x2, &quo);
printf(" * remquo(3.5, 4.5) = %.15f, %d\n", rem, quo);
rem = remquo(y2, y2, &quo);
printf(" * remquo(4.5, 4.5) = %.15f, %d\n", rem, quo);
rem = remquo(e, 0.0f, &quo);
printf(" * remquo(INFINITY, 0) = %.15f, %d\n", rem, quo);
rem = remquo(f, x1, &quo);
printf(" * remquo(-INFINITY, 3.0) = %.15f, %d\n", rem, quo);
rem = remquo(g, x1, &quo);
printf(" * remquo(NAN, 3.0) = %.15f, %d\n", rem, quo);
rem = remquo(g, e, &quo);
printf(" * remquo(NAN, INFINITY) = %.15f, %d\n", rem, quo);
printf(" **/\n");
/*
* remquo(3.0, 4.0) = -1.000000000000000, 1
* remquo(3.5, 4.5) = 0.000000000000000, 1
* remquo(4.5, 4.5) = 0.000000000000000, 1
* remquo(INFINITY, 0) = nan, 0
* remquo(-INFINITY, 3.0) = nan, 0
* remquo(NAN, 3.0) = nan, 0
* remquo(NAN, INFINITY) = nan, 0
**/
```
