在下面的代碼表達不能因爲編譯器來評估給我一個錯誤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