【问题标题】:What does the function remquo do and what can it be used for?函数 remquo 有什么作用,它可以用来做什么?
【发布时间】: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^nx/y 的积分商的大小,其中 n 是实现定义的大于或等于 3 的整数。

remquo 函数返回 x REM y。如果 y 为零,则存储在对象中的值 quo 所指向的未指定,以及是否发生域错误或函数 返回零是实现定义的。

我了解它返回的内容,它返回fmod(x, y),但我不了解整个quo 部分。它在语义上是否等于这个?

*quo = (int) x/y;
*quo %= n; /* n implementation defined */

最后一个问题,这个函数有什么用处?

【问题讨论】:

标签: c function


【解决方案1】:

remquo 确实没有给出x / y 的值似乎很清楚。它只给出商的几个低位。这是一个例子:

#define _ISOC99_SOURCE
#include <stdio.h>
#include <math.h>

int main()
{
    int quo;
    double res = remquo(88888.0, 3.0, &quo);
    printf("%f %d\n", res, quo);
    return 0;
}
$ 
$ cc -o rq rq.c
$ rq
1.000000 5

对于 OS X 10.8.2 (Xcode 4.6) 和 Linux 系统,我得到了相同的答案。全商是29629,5是它的低3位。

值得注意的是,商很容易太大而无法表示为 int。所以你能做的最好的就是给出一些低位。

无论如何,这不是“语言律师”。规范告诉你一些非常具体的事情。

【讨论】:

【解决方案2】:

remquo() 的一个典型用法是减少三角函数参数。商的最后 3 位将允许人们在减少模 Pi/4 后判断角度所在的半象限,并将原始触发调用转换为 [0,Pi/ 范围内的角度上的另一个触发调用4) 间隔(新的触发函数可能不同)。后者通常通过 Pade 近似计算。

【讨论】:

    【解决方案3】:

    编辑:正如 Jeffrey Scofield 在 his answer 中所说,返回的商实际上不是 x/y,而是商的低 3 位(加号)。

    相当于(取决于类型差异):

    quo = x/y;
    rem = x%y;
    

    其中rem 是返回值,quo 作为输出参数返回。
    与上述语法相比,它的优势在于它只执行一次除法运算。

    【讨论】:

    • ugoren:那么这部分是关于什么的? and whose magnitude is congruent modulo 2^n to the magnitude of the integral quotient of x/y, where n is an implementation-defined integer greater than or equal to 3.
    • 那是编程语言律师的谈话,很难读。它基本上意味着“等于 x/y”,但允许整数溢出。
    • @ugoran:因为2^3 == 8 我认为这是为了允许它在sizeof(int) == 1 byte 的实现上工作。但是他们为什么不强制n == sizeof(int)
    • 2^3 将允许 4 位整数(3+符号)。我认为规范是有意松散的,因此在各种平台上实施并不难。我猜想 32 位整数的合理实现将给出正确的商模 31。
    • 呃。我希望 C 标准更严格一些,这样你才能真正知道调用函数可以得到什么。但是感谢您的努力,我会接受您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 2011-02-27
    • 1970-01-01
    • 2011-01-19
    • 2012-02-15
    相关资源
    最近更新 更多