计算机求余原理是什么

阿飞千秋万载 发布于 08/21 10:55
阅读 350
收藏 0

为什么8.6%2=0.5999999999999996,不应是0.6吗

加载中
2
前端大师傅
前端大师傅

原因很简单,你8.6的字面量是double,在不显示说明字面量时,默认带.小数点的是double。而double取模操作是二进制取模,步骤是这样的:

1.8.6和2都会转成二进制。

2.再由这两者的二进制进行取模操作。

3.然后将二进制结果转成10进制

4.由2进制转成10进制的时候32位单精浮点指的是2进制32位,

5.从而你的结果只能是0.5999996.因为这个是10进制的单精浮点的长度上限。

如果你要得到0.6需要显式声明其为decimal即8.6m

 8.6m%2=0.6。有图为证!

0
湖水没了
湖水没了

为了让cpu更快,默认一些运算是直接调用cpu的浮点运算,想要得到精确的值就别直接用cpu运算,用更高级的运算方式

0
起个起个名字都难
起个起个名字都难

因为计算机浮点运算就是不准的,你用1-0.9,看看是不是0.1

0
猴子叫你一声敢答应吗
猴子叫你一声敢答应吗

小数能求于数??? 这个设计就是一个BUG。浮点数在计算机(PC)使用单独的浮点数单元实现的。方法简单粗暴--查表。整形是用alu单元实现的电路原理也很简单。

阿飞千秋万载
回复 @猴子叫你一声敢答应吗 : 但是我的应用需要利用小数余数
猴子叫你一声敢答应吗
猴子叫你一声敢答应吗
回复 @阿飞千秋万载 : 这是数论的基础吧
阿飞千秋万载
谁说不能求余,小数为什么不能求余?
返回顶部
顶部