gpt4 book ai didi

c# - 不检查浮点等式/不等式

转载 作者:行者123 更新时间:2023-12-02 17:23:52 43 4
gpt4 key购买 nike

我们正在使用一个代码分析器,它具有这样的规则“不检查浮点相等性/不等性”。下面是给出的示例。

float f = 0.100000001f; // 0.1
double d = 0.10000000000000001; // 0.1



float myNumber = 3.146f;
if ( myNumber == 3.146f ) //Noncompliant. Because of floating point imprecision, this will be false
{
////
}
else
{
////
}

if (myNumber <= 3.146f && mNumber >= 3.146f) // Noncompliant indirect equality test
{
// ...
}

if (myNumber < 4 || myNumber > 4) // Noncompliant indirect inequality test
{
// ...
}

当我测试此代码时,如果 ( myNumber == 3.146f ) 为真,所以我无法理解此规则的含义。

此规则需要什么解决方案或代码更改?

此规则适用于 C# 吗?当我用谷歌搜索时,我看到了更多关于此规则的 C/C++ 示例

最佳答案

float 不精确。在某些情况下,结果出乎意料,因此在没有一定公差的情况下比较 float 是否相等是不好的做法。

可以用简单的例子来演示。

if(0.1 + 0.2 == 0.3)
{
Console.WriteLine("Equal");
}
else
{
Console.WriteLine("Not Equal");
}

它将打印Not Equal

演示:https://dotnetfiddle.net/ltAFWe


解决办法是增加一些公差,例如:

if(Math.Abs((0.1 + 0.2) - 0.3) < 0.0001)
{
Console.WriteLine("Equal");
}
else
{
Console.WriteLine("Not Equal");
}

现在它将打印Equal

关于c# - 不检查浮点等式/不等式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40420188/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com