ieee754浮点异常有什么用?(NAN,OVERFLOW,INEXACT,UNDERFLOW,DIV0)

What is the use of ieee754 floating point exceptions?(NAN,OVERFLOW,INEXACT,UNDERFLOW,DIV0)

我知道浮点数异常的含义,我知道如何在 C++ 编程中获取这些异常(函数:fetestexcept(FE_INEXACT/FE_UNDERFLOW/...))

但是你能告诉我你有没有在你的项目或编程过程中使用过这些异常? 浮点异常有什么用?

浮点异常通常用于改进数值计算的speed/accuracy。例如,如果您默认使用较小尺寸的浮点数(比如单精度)并且处理器告诉您计算不准确或发生下溢或溢出,您可以使用更大尺寸的浮点数(比如双精度)重新评估,甚至可以根据需要使用软件模拟以更高的精度计算答案。假设计算主要适合较小的格式,它会 运行 更快,或者您将有更多机会进行矢量化。 (想象一下 SSE2/AVX/AVX512 行指令。)然后您可以使用更大的尺寸捕获并“重复”有问题的指令。

但是你是对的,对于大多数程序来说,这些异常不会被捕获,人们通常会忽略它们。可以说这是一件合理的事情,因为大多数程序不进行密集的数值分析。这是 1996 年的一篇论文,您应该阅读该论文以了解如何充分利用这些异常的详细信息:https://people.eecs.berkeley.edu/~fateman/264/papers/hauser.pdf