ldo*_*dog 0 c++ math floating-point double
我有两个
double a, b;
Run Code Online (Sandbox Code Playgroud)
我知道以下是真的
-1 <= a/b <= 1
Run Code Online (Sandbox Code Playgroud)
但是b可以任意小.当我天真地这样做,只是计算价值
a/b
Run Code Online (Sandbox Code Playgroud)
上面指定的条件在某些情况下不成立,并且我得到的值绝对值大于1(如13或14)
我怎样才能确保当我除以b时,得到一个值,以便可以强制执行上述条件.在我不能保证这一点的情况下,我很乐意将计算值a/b设置为0.
Sam*_*ell 10
你需要强制执行的是abs(a)≤abs(b).如果该条件成立,则-1≤a/b≤1,无论使用何种浮点精度.你的逻辑错误发生在除法之前,因为在分割点abs(a)> abs(b)违反了你的先验要求.
Ste*_*non 10
IEEE-754系统上的划分是一个正确的舍入操作,这意味着如果没有发生上溢或下溢,结果将始终在数学"无限精确"结果的0.5"ulp"范围内.在非FP-nerd中,这意味着结果总是在确切答案的约2 ^ -53的范围内.既然你知道无限精确的结果在-1和1之间,就不会发生溢出; 下溢可以,但这将导致数字非常非常接近零,而不是13的数量级.
您的条件实际上没有,或者您所在的系统没有IEEE-754算术,或者您的代码中存在错误.您可以发布生成此结果的a和b的值,以及用于进行除法并打印结果的代码吗?