Kyn*_*nth 17 .net c# double divide-by-zero
我正在经历一个意外的行为,并希望有人可以帮助提供一些关于调查重点的领域的指导.
我有两种方法,一种基本上对double执行除零测试,第二种extern方法为非托管dll 调用方法.
注意:在.Net运行时中,将Double除以零应该返回Infinity值(有趣或正面或负面).
我正在做的伪代码看起来像这样:
InfinityTest(); // Returns an Infinity value as expected
DllCall();
InfinityTest(); // Divide by zero error on second call.
Run Code Online (Sandbox Code Playgroud)
第一次调用InfinityTest()返回值Infinity按预期方式.第二次调用InfinityTest()抛出了一个我没想到的Divide by Zero异常.
更新
下面的有效InfinityTest()代码.为简洁起见,我删除了try/catch元素等.我没有权限详细了解DllCall()伪代码元素,道歉.
private double InfinityTest()
{
double a = 1.0;
int b = 0;
return a / b;
}
Run Code Online (Sandbox Code Playgroud)
Gab*_*abe 13
因为听起来你的DLL正在改变你的FP状态字,你唯一的选择可能是改回它.我建议P/Invoke _clearfp或_fpreset.以下是他们的P/Invoke签名:
[DllImport("msvcrt.dll")]
static extern UInt32 _clearfp();
[DllImport("msvcrt.dll")]
static extern void _fpreset();
Run Code Online (Sandbox Code Playgroud)
这可能不会使事情恢复到原来的状态,但希望它足够接近.
| 归档时间: |
|
| 查看次数: |
1565 次 |
| 最近记录: |