【发布时间】:2012-02-19 14:21:56
【问题描述】:
通读 C 规范我发现了这个函数:
double remquo(double x, double y, int *quo);
float remquof(float x, float y, int *quo);
long double remquol(long double x, long double y,
int *quo);
remquo函数计算与remainder函数相同的余数。在 quo 指向的对象存储了一个值,其符号是x/y的符号并且其 幅度是全等模2^n 为x/y的积分商的大小,其中 n 是实现定义的大于或等于 3 的整数。
remquo函数返回xREMy。如果y为零,则存储在对象中的值quo所指向的未指定,以及是否发生域错误或函数 返回零是实现定义的。
我了解它返回的内容,它返回fmod(x, y),但我不了解整个quo 部分。它在语义上是否等于这个?
*quo = (int) x/y;
*quo %= n; /* n implementation defined */
最后一个问题,这个函数有什么用处?
【问题讨论】:
-
用法在this question得到解答
-
还有来自cppreference 的注释:此函数在实现周期函数时非常有用,周期可精确表示为浮点值:当计算非常大的 x 的 sin(πx) 时,调用 std ::sin 直接可能会导致很大的错误,但是如果函数参数先用 std::remquo 进行归约,则可以使用商的低位来确定周期内结果的符号和八分圆,而余数可用于高精度计算。
-
@underscore_d 1. 我的问题早于那个问题。 2. 我的问题与 C 相关,而不是 C++。