双除以零将返回除零除错误

时间:2011-04-19 16:33:15

标签: c# .net double divide-by-zero

我遇到了意想不到的行为,并希望有人可以提供一些关于调查重点领域的指导。

我有两种方法,一种方法基本上对double执行除零测试,第二种方法为非托管dll调用extern方法。

注意:在.Net运行时中,将Double除以零应该返回一个Infinity值(有趣或正面或负面)。

我正在做的伪代码看起来像这样:

InfinityTest(); // Returns an Infinity value as expected
DllCall();
InfinityTest(); // Divide by zero error on second call.

第一次调用InfinityTest()会按预期返回值Infinity。第二次调用InfinityTest()会抛出一个我没想到的Divide by Zero异常。

更新

下面的有效InfinityTest()代码。为简洁起见,我删除了try / catch元素等。我没有权限详细了解DllCall()伪代码元素,道歉。

private double InfinityTest()
{
    double a = 1.0;
    int b = 0;
    return a / b;
}

1 个答案:

答案 0 :(得分:13)

由于听起来您的DLL正在更改您的FP状态字,因此您唯一的选择可能是将其更改回来。我建议P / Invoke到_clearfp_fpreset。以下是他们的P / Invoke签名:

    [DllImport("msvcrt.dll")]
    static extern UInt32 _clearfp();
    [DllImport("msvcrt.dll")]
    static extern void _fpreset();

这可能无法将事情重新恢复到原来的状态,但希望它足够接近。