为什么% 运算符不能用于 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++ 中的浮点数,但可以在 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(不精确)。

相关文章: