有ieee的双人间吗?x>0
使.sqrt(x*x) ≠ x
,在计算的条件下x*x
不会溢出或下溢到Inf
,0
,还是一个正常数?
这是因为sqrt
返回最近的可表示结果,也是如此。x*x
(正如ieee标准所规定的那样,“平方根运算的计算方法应该是无限精确的,然后舍入到围绕无限精确结果的指定精度的两个最近的浮点数之一”)。
假设如果存在这样的双倍,那么可能有接近1的例子,我编写了一个程序来查找这些反例,但是它没有在1.0
和1.0000004780981346
。
发布于 2018-05-21 11:30:06
引用该条的摘要:
浮点专家知道,当用浮点算法实现时,数学公式可能会失败或给出不精确的结果。实际上,使用基2和无界指数范围,浮点数a的平方根的计算精确地是x_a_x。其结果是a/sqrt(a2+b2)的浮点计算总是在区间内。−1,1。这消除了在此值上调用ARccOS或arcsin时对测试的需要。为了获得更多的保证,使用Coq验证助手和Flocq库对该属性进行了正式检查。这一结论将暗示在没有假设的情况下发生了什么,以及在其他的Radice中,那里的行为是非常不同的。
“使用基2”很可能隐含在您的问题中(尽管ieee也标准化了十进制浮点数格式和操作),并且“无界指数范围”相当于你的“无溢出或下溢”限制。
https://stackoverflow.com/questions/-100004530
复制相似问题