如何抛出EXCEPTION_FLT_UNDERFLOW?
我需要一个示例代码,它会抛出 EXCEPTION_FLT_UNDERFLOW。我已经有代码来处理该异常。现在我需要样本,那就抛出它。有什么建议吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我需要一个示例代码,它会抛出 EXCEPTION_FLT_UNDERFLOW。我已经有代码来处理该异常。现在我需要样本,那就抛出它。有什么建议吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
假设您想要触发此操作的实际代码:
Assuming you want actual code that will trigger this:
尝试:
Try:
即使在 C99 中也没有可移植的方法来执行此操作。这适用于 Linux:
但如果没有
#define _GNU_SOURCE
和fesetenv
调用(不可移植),则不会抛出异常(= = 不会触发SIGFPE
(Unix 术语),它只是设置一个标志。并且 MSVC 的迭代均不支持
,因此您在 Windows 上只能使用完全非标准的产品。也就是说,似乎确实存在特定于 Windows 的等效项:
您必须使用实际的浮点运算来导致下溢情况。我不知道该怎么做。最好用汇编语言手动完成,以避免来自编译器的干扰(甚至更加不可移植,是的,但如果你使用 Windows,你可能不关心除 x86 之外的任何 CPU)。
Even in C99 there is no portable way to do this. This works on Linux:
but without the
#define _GNU_SOURCE
and thefesetenv
call (which are not portable), the exception is not thrown (== does not triggerSIGFPE
, in Unix terms), it just sets a flag. And no iteration of MSVC supports<fenv.h>
, so you're stuck with completely nonstandard on Windows.That said, there does appear to be a Windows-specific equivalent:
You will have to cause an underflow condition using actual floating point operations. I don't know how to do that off the top of my head. It would probably be best to do it by hand in assembly language, to avoid interference from the compiler (even more non-portability, yes, but if you're on Windows you probably don't care about any CPU but x86).
抛出异常_FLT_UNDERFLOW;
throw EXCEPTION_FLT_UNDERFLOW;