推导6本身是正确的,你的演算有如下问题:
你的值:
a = 2; b = 100; x = 3.14;
;
0、
a是分子,b是分母,那么a ÷ b = 2 ÷ 100 = 2 / 100 = 0.02
由于C语言本身是向0取整,结果丢弃小数位,值为0;
;
1、
实数x不是任意定义的,实数x必须满足推导6的两个条件之一,实数x满足的条件不同,将直接影响最后的结果。
而你的x = 3.14属于任意定义,且不符合推导6的两个条件;
先假设x = 3.14正确,代入推导6公式,可反证你的错误
①
0 <= x < |1/b| ==> 0 <= 3.14 < |1/100| ==> 0 <= 3.14 < 0.01
3.14 >=0 满足,3.14 < 0.01 不满足
②
-|1/b| < x <=0 ==> -|1/100| < 3.14 <= 0 ==> -0.01 < 3.14 <= 0
3.14 > -0.01 满足,3.14 <= 0 不满足
如此,推导6公式对你的演算,是不支持的。
;
2、
计算实数x的值:
①
0 <= x < |1/b| ==> 0 <= x < |1/100| ==> 0 <= x < 0.01
实数x在条件①的范围 [0,0.01)
②
-|1/b| < x <=0 ==> -|1/100| < x <= 0 ==> -0.01 < x <= 0
实数x在条件②的范围(-0.01,0]
;
3、
验证实数x在条件范围内时,推导6的正确:
①
0 <= x < |1/b| ,
实数x在条件①的范围 [0,0.01),假设实数x取值0.001
代入推导6取下整(往负无穷方向)
a/b+x = 2/100 + 0.001 = 0.021 ==> 取下整值为 0
a/b = 2/100 = 0.02 ==> 取下整值为 0
0 等于 0,符合
②
-|1/b| < x <=0
,实数x在条件②的范围
(-0.01,0]
,假设实数x取值-0.001
代入推导6取上整(往正无穷方向)
a/b+x = 2/100 + (-0.001) = 0.019 ==> 取上整值为 1
a/b = 2/100 = 0.02 ==> 取上整值为 1
1 等于 1,符合
最后于 2019-5-30 22:24
被DeepMind编辑
,原因: