c# - 看似相等的 float 变量不相等的例子

标签 c#

<分区>

任何人都可以向我展示两个包含浮点值的 C# 变量的示例,这些浮点值“看起来”相等但实际上不相等。当我说“看起来相等”时,我的意思是它们在直觉上似乎是相等的。

我寻找这样一个示例的原因是因为我有比较两个浮点变量是否相等的代码,而 Visual Studio 警告我 由于精度不同, float 的比较可能不相等这两个值。。我知道 float 变量不精确(这里有一个 StackOverflow question,对此进行了非常清楚的讨论和解释)但是我没有找到一个实际的例子,其中两个看起来相等的值实际上被 C# 认为是不同的。

例如,我之前提到的 SO 问题的第一个答案提到 9.292/10 在内部表示不同所以我写了下面的代码来验证是否C# 会将它们视为相等或不相等,结果是它们被视为相等。

var f1 = 92f / 10f;
var f2 = 9.2f;
if (f1 == f2)
{
    Console.Write("Equal, as expected");
}
else
{
    Console.Write("Surprisingly not equal");
}

因此,我正在寻找一个 f1f2 的示例,它们“看起来”是相等的,但会导致 C# 将它们视为不同的。

最佳答案

如果您不坚持float (Single) 类型,但实际上想要任何 float 类型 (Single, Double) 您可以尝试的示例:

   if (Math.Sqrt(2.0) * Math.Sqrt(2.0) == 2.0) 
     Console.Write("Equal, as expected");
   else 
     Console.Write("Surprisingly not equal");

关于c# - 看似相等的 float 变量不相等的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44221679/

相关文章:

c# - 如何在 Asp.net MVC 中使用 C# 访问 HTML 元素?

c# - 坚持异步任务并等待

c# - 简单注入(inject)器 Web Api Controller 构造函数注入(inject)失败

c# - Selenium:如何识别 if 语句中的元素?

c# - Rx .NET 中的调度

c# - 使用 iText7 和 ASP.NET C# 在 PDF 文件的页脚中添加页码

c# - 将 dataGridView 中的选定行作为对象检索

c# - 我想全选并复制到剪贴板

c# - EF linq模拟中临时创建的表中的异常

c# - 如何在 C# 中使用 System.Data.Services.Client?