类型"double"和"int"的操作数无效到二进制"运算符%"

invalid operands of types `double' and `int' to binary `operator%'

本文关键字:二进制 无效 运算符 double int 类型 操作数      更新时间:2023-10-16

编译时给出double ' and类型int '到二进制' operator % '的错误无效操作数

int x, y, z;
float R;
cout <<"Ejercicio N 2"<<endl;
cout <<"De la expresion: R=(x^3*8MOD2DIVY/(3+x^2))/(8-z/7-y*11MOD2) suministrar el valor de tipo entero X,Y,Z"<<endl;
cout <<"Ingrese el valor de X: "; cin>> x;
cout <<"Ingrese el valor de Y: "; cin>> y;
cout <<"Ingrese el valor de Z: "; cin>> z;
R=(pow(x,3)*8%2/y/(3+pow(x,2)))/(8-z/7-y*11%2);
cout <<"La respuesta es: "<<R<<endl<<endl<<endl;

pow函数不存在整数结果过载

因此结果是浮点类型,特别是double类型,而c++ %操作符只接受整数参数。

您可以使用fmod函数来计算浮点型参数的余数,或者您可以计算整数幂,例如x*x*x


请注意,如果是一个整数结果pow,那么子表达式
pow(x,3)*8%2

白马王子;总是产生0

你知道为什么吗?

如果您将R的分配减少为:

R = pow(x, 3) % 2;

那么更清楚的是,问题是std::pow返回double, 2int。使它们具有相同类型的一个可能解决方案是将std::pow:

的结果进行大小写处理。
R = (int)pow(x, 3) % 2;

在您的示例中,您将pow(x, 3)乘以8,但结果仍然是双精度