0
我寫了下面行C#_controlfp並不妨礙DivideByZeroException
using System;
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
class Program
{
[DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)]
extern static uint _controlfp(uint newcw, uint mask);
const uint _MCW_EM = 0x0008001f;
public const uint EM_INVALID = 0x00000010;
public const uint EM_DENORMAL = 0x00080000;
public const uint EM_ZERODIVIDE = 0x00000008;
public const uint EM_OVERFLOW = 0x00000004;
public const uint EM_UNDERFLOW = 0x00000002;
public const uint EM_INEXACT = 0x00000001;
static void MaskFpu(uint pExceptionMask = EM_INVALID)
{
// add desired values
_controlfp(_MCW_EM, pExceptionMask);
}
static void Main(string[] args)
{
MaskFpu(EM_ZERODIVIDE);
int a = 0;
var b = 5/a;
Console.WriteLine("b = " + b);
}
}
}
Main方法開始通過設置控制字。顯然我想要DivideByZeroExceptions被屏蔽。
執行完_controlfp後,我期望零除以返回NaN。但是var b = 5/a
反而會引發異常。
我該如何真正讓我的過程不會引發DivideByZeroExceptions?
如果你實際上只是在你的測試中使用了浮點類型,你不會需要任何這個容易出錯的遺留垃圾。嘗試一下。 – leppie
我期望'controlfp'來控制*浮點操作 - 你正在執行整數操作。嘗試使用'0.0'或'5.0',看看是否可以幫助你... –
也許[this](https://msdn.microsoft.com/en-us/library/aa261190%28v=vs.60%29。 aspx)將有助於:_「隨後可通過調用_ _controlfp(EM_ZERODIVIDE,EM_ZERODIVIDE)」_ – DGibbs