在下面的代码表达不能因为编译器来评估给我一个错误C++如何评估涉及双数据类型模数的数学表达式?
#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()'而不是'%'; [一个是前缀符号,另一个是中缀](http://www.cs.man.ac.uk/~pjj/cs2121/fix.html)。 – DanielKO
,因为这将改变优先顺序,它将在乘以'a * b'之前计算mod'fmod(b,c)',同时在BODMAS中我们从左到右移动 –
通过“重写它来使用'fmod() ''我的意思是你在保持相同意义的同时重写。你检查了我发布的链接吗?可以将'a + b * c + d'改写为'add(add(a,(mul(b,c)),d)'。不要只是推入'fmod',找出评估的顺序并且适当地嵌套表达式 – DanielKO