【发布时间】:2013-10-17 08:26:21
【问题描述】:
在下面的代码中,无法计算表达式,因为编译器给了我一个错误
#include <iostream>
int main()
{
std::cout<< "Welcome\nto\n\nc++!\n";
// std::cout<< "to c++ ! \n";
double a=2;
double b=2;
double c=3;
double d=4;
double e=5;
double f=6;
double sum;
sum=(a*b%c+d/e-f); // error: invalid operand of types double and double to binary operators%
std::cout <<"Sum is:" << (float) sum;
return 0;
}
我知道 fmod(x,y) 函数可以用于双精度,但表达式不会保持不变,有没有其他方法可以做到,或者我需要自己制作一个表达式评估器。如果是这样那怎么办?我是 C++ 新手,请帮忙,为什么编译器不够智能?
【问题讨论】:
-
“不会保持不变”是什么意思?您只需将其重写为使用
fmod()而不是%; one is prefix notation, the other is infix. -
因为这会改变优先顺序,它会在乘以
a*b之前计算modfmod(b,c)而在BODMAS中我们从左到右移动 -
“重写它以使用
fmod()”我的意思是你在保持相同含义的同时重写。你检查了我发布的链接吗?a + b * c + d可以改写为add(add(a, (mul(b, c)), d)。不要只是将fmod推入,弄清楚评估的顺序并正确嵌套表达式。
标签: c++ evaluation modulus mathematical-expressions