为什么% 运算符不能用于 C/C++ 中的浮点数,但可以在 Java 和 C# 中使用
本文关键字:但可以 Java 浮点数 不能 运算符 用于 C++ 为什么 | 更新日期: 2023-09-27 18:35:38
考虑以下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(不精确)。