оценка — Как 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 ++, пожалуйста, помогите, но почему компилятор недостаточно умен?

0

Решение

Бинарный оператор принимает два (= бинарных) аргумента (как может функция), поэтому выражение 5 + 4 можно так же легко написать с помощью некоторой функции add(5, 4),

Обратите внимание на сообщение об ошибке, ключевые слова: «недопустимый бинарный оператор операнда%»

Поэтому, когда вы хотите использовать fmod Вы хотите (дважды проверьте документацию) и решите, что является правым и левым операндом в вашем выражении. Вывод зависит от того, как вы пишете выражение, вот два возможных способа:

fmod(a*b, c) + d/e-f Это правильный порядок старшинства как ты это написал.

Однако, если мы предполагаем, что вы хотите, чтобы все, что осталось от модуля, было числителем, а все, что справа от модуля, было знаменателем, мы могли бы написать это так:

fmod(a*b, c+d/e-f) Это не будет эквивалентно вашему исходному выражению.

Обратите внимание на некоторые документация для этой функции, где он говорит параметры.

В C ++ существует небольшое ожидание, что программист обладает интеллектом, а не компилятором. Именно так программисты имеют более четкий контроль над поведением кода.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]