我有一个C ++程序(使用g ++编译)。我试图将两个双精度数作为操作数应用于模数函数,但出现以下错误:
错误:类型为“ double”和“ double”的无效操作数为二进制“ operator%”
这是代码:
int main() {
double x = 6.3;
double y = 2;
double z = x % y;
}
@supercat更多细节会很棒。我认为应该对幕后发生的事情有一个了解,以使您说出的事实是正确的,但最好能弄清为什么您说的是事实。看看它在幕后的工作方式会很有趣(我想我理解,但很容易出错)。
—
RastaJedi '16
浮点值表示精确的整数倍或2的幂的分数。例如,整数文字0.1恰好是3602879701896397/36028797018963968(后一个值是2的幂)。
—
超级猫
fmod(x,0.1)
将x除以该精确分数并取余数,而不是除以数值“十分之一”。
可能重复:为什么模数除法(%)仅适用于整数?
—
Paul R
fmod
可能会导致意外行为。例如,在fmod(1, 0.1);
数学上应为零,但实际上几乎为0.1。误差的程度随商的大小而增加。例如,fmod(9E14, 0.1);
计算得出的值约为0.05,这从数学的角度来看完全是错误的。