相关疑难解决方法(0)

我该如何进行浮点比较?

我正在编写一些代码,其中包含以下内容:

double a = SomeCalculation1();
double b = SomeCalculation2();

if (a < b)
    DoSomething2();
else if (a > b)
    DoSomething3();
Run Code Online (Sandbox Code Playgroud)

然后在其他地方我可能需要做平等:

double a = SomeCalculation3();
double b = SomeCalculation4();

if (a == 0.0)
   DoSomethingUseful(1 / a);
if (b == 0.0)
   return 0; // or something else here
Run Code Online (Sandbox Code Playgroud)

简而言之,我有很多浮点数学正在进行,我需要对条件进行各种比较.我无法将其转换为整数数学,因为在这种情况下这样的事情毫无意义.

我以前读过浮点比较可能不可靠,因为你可以做这样的事情:

double a = 1.0 / 3.0;
double b = a + a + a;
if ((3 * a) != b)
    Console.WriteLine("Oh no!");
Run Code Online (Sandbox Code Playgroud)

简而言之,我想知道:我如何可靠地比较浮点数(小于,大于,相等)?

我使用的数字范围大致是从10E-14到10E6,所以我确实需要使用小数字和大数字.

我已将此标记为语言无关,因为无论我使用何种语言,我都对如何实现此目标感兴趣.

language-agnostic floating-point comparison

73
推荐指数
4
解决办法
6万
查看次数

比较Double和Int的最佳方法是什么?

C#中的以下代码不起作用:

int iValue = 0;
double dValue = 0.0;

bool isEqual = iValue.Equals(dValue);
Run Code Online (Sandbox Code Playgroud)

那么,问题是:比较Double和Int的最佳方法是什么?

c# double int equals

24
推荐指数
1
解决办法
3万
查看次数

在VB中为什么(1 = 1)是假的

我刚刚看到这段代码:

Dim d As Double

For i = 1 To 10
  d = d + 0.1
Next

MsgBox(d)
MsgBox(d = 1)
MsgBox(1 - d)
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释我的原因吗?为什么d要设置1

vb.net

4
推荐指数
1
解决办法
194
查看次数

将两个双精度值相加时出现算术错误

可能的重复:Java 中的
浮点不准确示例
双算术和相等

我在尝试调试检查两个值是否相等的排序例程时发现了这个问题。获取值只是对两个双变量进行一些加法:0.31 + 0.27。

当排序将这两个的总和与另一个对象的总和也等于 0.58 进行比较时,它告诉我比较不相等。查看第一个对象的总和,我看到它列为 0.58000000000000007。想知道它是否与我的代码有关,我创建了一个简单的控制台应用程序来测试它:

static void Main(string[] args)
    {
        double val1 = .31;
        double val2 = .27;

        Console.WriteLine("Value 1: " + val1);
        Console.WriteLine("Value 2: " + val2);

        double added = val1 + val2;

        if (!added.Equals(.58))
            Console.WriteLine("Added value is not .58!");
        else
            Console.WriteLine("Added value is .58");


        Console.WriteLine("Press any key to exit.");
        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

在我的机器上运行它,它又是 0.58000000000000007。我有一个同事做同样的事情,并提出了相同的输出。

有没有人遇到过这个?我们都运行 64 位 Windows 7,这是在 C# 中完成的 - 我没有在其他场景中测试过。

c# math 64-bit

1
推荐指数
1
解决办法
2793
查看次数

为什么浮点值条件在'if'条件下失败?

可能重复:
与float文字的float比较中的奇怪输出

这是代码

#include<stdio.h>
int main()
{
 float a=0.3;
 if(a==0.3)
  printf("Hello World!");
 else
  printf("Stack Overflow");
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

我期望输出为"Hello World".但我得到了"堆栈溢出".为什么我没有得到"Hello World"?

if情况有什么不对吗?

c if-statement

0
推荐指数
1
解决办法
3万
查看次数