猿问

为什么模数除法(%)只适用于整数?

我最近遇到问题使用模数除法可以很容易地解决这个问题,但是输入是一个浮点:

给定一个周期函数(例如:sin)和一个只能在周期范围内计算它的计算机函数(例如[-π,π]),生成一个可以处理任何输入的函数。

“显而易见的”解决方案如下:

#include <cmath>float sin(float x){
    return limited_sin((x + M_PI) % (2 *M_PI) - M_PI);}

为什么这个不行?我知道这个错误:

error: invalid operands of types double and double to binary operator %

有趣的是,它确实在Python中工作:

def sin(x):
    return limited_sin((x + math.pi) % (2 * math.pi) - math.pi)


凤凰求蛊
浏览 977回答 3
3回答

Cats萌萌

因为“余数”的一般数学概念只适用于整数除法。即产生整数商所需的除法。为了将“余数”的概念扩展到实数,您必须引入一种新的“混合”运算,它将生成整型商真品操作数。核心C语言不支持这种操作,但它是作为标准库提供的。fmod功能,以及remainder在C99中起作用。(请注意,这些函数是不一样的,并且有一些特性。特别是,它们不遵循整数除法的舍入规则。)

泛舟湖上清波郎朗

你在找fmod().我想,为了更具体地回答您的问题,在旧语言中,%运算符刚刚被定义为整数模除法,在较新的语言中,他们决定扩展运算符的定义。编辑:如果我要猜一猜为什么,我会说这是因为模算术的思想起源于数论,并且专门处理整数。
随时随地看视频慕课网APP
我要回答