gpt4 book ai didi

c# - Double 除以零返回除以零错误

转载 作者:可可西里 更新时间:2023-11-01 03:01:27 25 4
gpt4 key购买 nike

我遇到了意外行为,希望有人可以提供一些指导,让我知道应该重点调查哪些领域。

我有两种方法,一种基本上对 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() 的第二次调用引发了我没有预料到的除以零异常。

更新

下面的有效 InfinityTest() 代码。为简洁起见,我删除了 try/catch 元素等。抱歉,我无权深入了解有关 DllCall() 伪代码元素的详细信息。

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

最佳答案

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

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

这可能不会将事情重置回原来的样子,但希望它足够接近。

关于c# - Double 除以零返回除以零错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5719657/

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