模量在 C++ 中使用双精度时不起作用
modulus is not working when using doubles in c++
我不允许使用mod。我认为这不起作用,因为我使用的是双打;有没有办法解决这个问题? ---评论区域
工作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;
}
}
使用 std::fmod
.它对双打有一个重载:
#include <cmath>
std::fmod(num1, num2);
模运算符%
是一个积分函数。
您需要将fmod
用于浮点。
%
只允许用于整型或无作用域枚举,您可以使用 std::fmod 表示双精度:
#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;
}
当然,您可以重载"%"运算符以对您喜欢的任何类型执行模运算。但是,该语言中没有对双打的内置支持。
我认为你可以用'long int'替换你的双打,这将有助于你克服错误,这也适用于所有基于整数的操作。
我在我的一个代码中进行了此更改并正确处理了它,但带有警告。但它确实工作得很好,所以试试看,它应该工作得很好。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 为什么我的数组双精度函数不起作用?
- 双链表的自定义实现不起作用(教育)
- "+=" 操作在类型之间不起作用 std::复杂<double>和__complex__双精度
- 双链表堆栈删除函数不起作用
- 双链接列表添加元素不起作用,不知何故它总是保持为空
- C++ 将 int 转换为双精度不起作用
- 双缓冲在笔记本电脑上不起作用,在台式机上起作用
- 长和 int 不够,双倍不起作用
- C++ 双精度不起作用
- 模量在 C++ 中使用双精度时不起作用
- 双布尔数组在 C++ 中不起作用
- Boost assign list_of对双字面值不起作用
- 以双精度数除以双精度数来获得循环中的余数和char参数不起作用
- 无法弄清楚为什么使用提升库对我不起作用的多精度计算
- 为什么这种双精度到整型的转换不起作用?