为什么% 运算符不能用于 C/C++ 中的浮点数,但可以在 Java 和 C# 中使用
why % operator can not be used for float in C/C++ but can be used in Java and C#?
考虑以下C++程序:
#include <iostream>
int main()
{
float f = 9.9f, m = 3.3f;
float c = f % m;
std::cout << c;
return 0;
}
显示错误:Illegal use of floating point
当我用 Java 编写相同的程序时,例如:
class Test
{
public static void main(String args[])
{
float f = 9.9f, m = 3.3f;
float c = f % m;
System.out.println(c);
}
}
给我输出:3.2999997
以及在 C# 中:
using System;
class Test
{
public static void Main()
{
float f = 9.9f, m = 3.3f;
float c = f % m;
Console.WriteLine(c);
}
}
给出输出:3.3
为什么相同的编程逻辑以不同的语言提供三个不同的输出?为什么我们不能在 C/C++ 中使用带有浮点数的modulo %
,但可以在 Java 和 C# 中使用?
对不起,如果这是一个愚蠢的问题...我是学生。。。谢谢。
可能 C 和 C++ 没有它,因为有多种方法可以做到这一点:四舍五入到零 ( fmod
) 和四舍五入到最接近的整数 ( remainder
)。您必须知道(或查找)您引用的其他语言选择了哪些版本。
我从这里找到了最简单的解决方案。
模运算符(余数运算符)返回除法的那部分 在非浮点运算的情况下丢弃(其余部分)。
所以当你有浮点模时没有意义,因为 没有任何东西被丢弃。
e.g. int: 155 % 100 = 55 so, for integer division, 155 / 100 = 1 reminder = 55 and for floating point division: 155 / 100 = 1.55 remainder=0.0
因此,由于在划分浮点时没有提醒,% 运算符不适用于浮点运算。
因此,在早期的语言(如 C)中,不支持浮点%
运算符。
在 java 和 C# 中,余数的概念得到了扩展,并且在使用运算符时%
浮点数被视为一个数字价格,最高可达 x 小数点。
例如,Java将占用9.900000 % 3.300000 = 3.2999997
,C#将占用9.9 % 3.3 = 3.3
。所以,这里 9.900000 和所有浮点数在使用 %
时成为价格 no.s .所以他们可以给剩余的。实际上,它们是 9.9x(不精确)。
相关文章:
- Clion显示错误,但可以使用Cmake成功构建代码
- Eclipse CDT clang 工具链 - 无法从链接器选项中删除 stdlibc++,但可以添加 libc++,E
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 为什么我们不能使用整数到字符串直接转换,但可以按位到字符串?
- 为什么我不能写cout<<a==b;但可以写cout<<(a==b);
- 无法使用 Openvino 中间表示文件转发() 网络,但可以使用我正在制作 IR 的 ONNX 文件
- VSCode C/C++IntelliSense标识符未定义,但可以解析定义
- 为什么我不能在未链接的 DLL 上调用方法,但可以这样做?C++
- 我将如何通过抽象类传递虚拟方法,但可以选择不重写
- gtest - 确保方法之前没有被调用,但可以在某个方法调用之后调用
- 无法使用Ostream打印,但可以使用COUT打印
- 设置具有非constexpr函数的constexpr变量(但可以在编译时间计算)
- 为什么我无法使用CreateFile Win32 API打开文件RW,但可以使用STD ::删除将其删除
- 为什么我在使用 Qt creator 用 C 编译代码时出错,但可以使用 make 文件轻松做到这一点
- Boost 1_65_1 不能使用 OpenSSL 1.1.0g "undefined reference" 编译,但可以使用 "nm"
- C++:无法使用 regsvr32 注册我的 DLL,但可以通过 IDE 工作
- 为什么不能从元组中分配一对,但可以从一对中分配元组?
- 获取指向成员std::string::size的指针无法与libc++链接,但可以与libstdc++一起使用
- 为什么我们不能在 C++ 中声明同一类中的类的对象,但在 Java 中是允许的?
- 为什么% 运算符不能用于 C/C++ 中的浮点数,但可以在 Java 和 C# 中使用