我知道浮点异常的含义,也知道如何在C++编程中获取这些异常( function: fetestexcept(FE_INEXACT/FE_UNDERFLOW/...))
但是你能告诉我你在你的项目或编程过程中用过这些异常吗?浮点异常的用途是什么?
发布于 2021-04-19 12:19:06
浮点异常通常用于提高数值计算的速度/精度。例如,如果默认情况下使用较小大小的浮点数(比方说单精度),而处理器告诉您计算不精确,或者发生了下溢或溢出,则可以使用较大大小的浮点数(比方说双精度)重新计算,甚至可以根据需要使用软件仿真来计算精度更高的答案。假设计算大部分都适合较小的格式,它会运行得更快,或者你会有更多的机会向量化。(想象一下SSE2/AVX/AVX512指令行。)然后,您可以使用更大的大小捕获并“重复”有问题的代码。
但你是对的,对于大多数程序来说,这些异常是不会被捕获的,人们通常会忽略它们。可以说,这是一件合理的事情,因为大多数程序都不会进行密集的数值分析。这里有一篇1996年的论文,你应该阅读一下,了解如何很好地利用这些异常的细节:https://people.eecs.berkeley.edu/~fateman/264/papers/hauser.pdf
https://stackoverflow.com/questions/67155241
复制相似问题