【发布时间】:2021-10-26 23:45:40
【问题描述】:
我需要修复一些代码
if ( abs(( (a/b) - (c/d) ) / (a/b)) > 0.1) { ...
这是检查这些值是否有意义的一部分。如果不是,它将重新查询这些值。事先进行检查以确保它在任何点都不会被零除,但该等式有时会出现浮点下溢错误。我正在尝试找出一种方法来运行它以消除任何可能的错误。
Try and catch 已经退出,因为这是在 C 而不是 C++ 中,setjmp 和 longjmp 似乎只有在你可以自己“抛出”错误时才有效(我没有看到任何例子是程序导致触发它的错误)
我的解决方案可以编译但很难测试(因为它是整个系统的一部分):
if (val = abs(( (a/b) - (c/d) ) / (a/b)){
if (val > 0.1) {
如果'if'语句中的语句试图抛出错误,它会停止程序还是跳过if语句?
欢迎提出其他意见
【问题讨论】:
-
我认为没有任何方法可以检测 C 中的浮点下溢/溢出。
-
“if”语句如何引发错误?什么错误?
-
这不是您问题的答案,但将这个条件包装在一个具有有意义名称的函数中肯定会很有用。
-
如果系统不依赖于该特定计算来继续,则为每个计算添加逻辑并在计算之前记录任何会破坏计算的传入值可能会更安全。例如。检查 (a/b) - (c/d) 和 (a/b) 的范围并检测上溢或下溢。这是什么硬件导致下溢?
-
你为什么要计算
(a/b - c/d) / (a/b)而不是代数等价的1 - (b*c)/(a*d)?您是否正在尝试处理一些数字问题?
标签: c error-handling