C++ 在c+中使用双精度时,模数不起作用+;
我不被允许使用mod。我认为它不起作用,因为我使用双打;有办法解决这个问题吗?--注释区域不起作用C++ 在c+中使用双精度时,模数不起作用+;,c++,C++,我不被允许使用mod。我认为它不起作用,因为我使用双打;有办法解决这个问题吗?--注释区域不起作用 void displayResults(double num1, char oper, double num2) { switch(oper) { case '+' : cout << num1 << "+" << num2 << "=" << (num1+num2) << endl;
void displayResults(double num1, char oper, double num2)
{
switch(oper)
{
case '+' :
cout << num1 << "+" << num2 << "=" << (num1+num2) << endl;
break;
case '-' :
cout << num1 << "-" << num2 << "=" << (num1-num2) << endl;
break;
case '*' :
cout << num1 << "*" << num2 << "=" << (num1*num2) << endl;
break;
case '/' :
if ( num1==0 || num2==0)
cout <<"A number divided by 0 or divided into 0 is always 0"<< endl;
else
cout << num1 << "/" << num2 << "=" << (num1/num2) /*+ (num1%num2) */ << endl;
break;
// case '%' :
// cout << num1 << "%" << num2 << "=" << (num1%num2);
//break;
}
}
void显示结果(双num1、字符操作、双num2)
{
开关(操作)
{
格“+”:
不能使用。它有一个双打过载:
#include <cmath>
std::fmod(num1, num2);
#包括
标准::fmod(num1,num2);
模运算符%
是一个积分函数
您需要使用fmod
进行浮点运算。%
仅允许用于整数类型或非范围枚举,您可以使用double:
#包括
#包括
int main(){
双num1=5.5;
双num2=3.0;
双z=std::fmod(num1,num2);
std::cout当然,您可以重载“%”运算符来对任何类型执行模运算。但是,该语言中没有内置的对double的支持。我认为您可以将double替换为“long int”,这将帮助您克服错误,这也适用于所有基于整数的操作
我在我的一个代码中做了这一更改,并得到了正确的结果,不过有一个警告。但它确实工作得很好,所以请尝试一下,它应该工作得很好。你不被允许?它怎么不工作?编译器错误?运行时异常?输出不正确?我真的不明白。从数学上讲,例如,2.6/1.5的剩余部分是什么?@khajvah i m我可能是蝙蝠侠,但我不是数学家。:-@khajvah:如果我们想要a/b的余数,其中b是正的,写a=q*b+r。q必须是整数,我们需要0@KenWayneVanderLinde根据cppreference.com
,a-q*b
的绝对值必须小于b
的绝对值,所以当b
I如果是否定的,我们选择否定的q
。因此,余数在这两种情况下都是相同的。@khajvah:是的,fmod与a
给出了相同的符号。但是这与数学用法不同,所以有时它很容易混淆!你所说的“内置”是什么意思。std
不是“内置”吗?std中似乎有一个函数用于doubles@khajvah有一个函数,但不支持双精度运算符%的内置支持。
#include <cmath>
#include <iostream>
int main() {
double num1 = 5.5;
double num2 = 3.0;
double z = std::fmod(num1,num2);
std::cout << z << std::endl ;
return 0;
}