关于scratch加减法
scratch吧
全部回复
仅看楼主
level 4
bigfacefishs 楼主
这是为啥?真心求教,不水。
2020年05月01日 15点05分 1
level 10
计算机处理这些数据时会转化为二进制来存储,小数部分如果不是由几个2的负整数指数幂组成计算机无法精确表示,只能取近似值(十分接近了)。
可以使用“消点法”来解决这种问题。
首先计算出每个数小数点后有几位,消去小数点后,转为整数计算,之后把小数点加回去。
或者使用高精度算法都是可以哒[太开心]
2020年05月01日 16点05分 2
谢谢回复,我做的是个7位的计算器,没办法确定每个结果会有小数点后各位,小数点
2020年05月02日 00点05分
小数点后最多4位,这咋弄?强制每个计算带小数点的结果都7个字符,不足的以0填充?
2020年05月02日 00点05分
level 13
我的话会选择计算→乘10→四舍五入→除以10(ಡωಡ)
2020年05月01日 23点05分 3
我不是四舍五入到小数点后一位啊
2020年05月02日 00点05分
@bigfacefishs 那就乘10000
2020年05月08日 08点05分
level 8
小数精度问题
2020年05月02日 00点05分 4
level 8
“小数”(浮点数)和“整数”是不同的。一种解决方法是将两个操作数同时乘以小数部分长度的10次方倍,将运算得到的结果除以小数部分长度的10次方倍。
需要注意的是,scratch中整数过“大”时(比如大于10的20次方这个量级),数字将以科学计数法形式表示(我猜是丢精度的),此时建议使用高精度算法。
2020年05月02日 01点05分 5
谢谢
2020年05月02日 04点05分
吧务
level 15
用高精吧,先给较短的数后面补0,再把每位分别相加减,记录进位借位并在下一位补回来(就跟你列竖式计算一样)
乘除同理
2020年05月02日 01点05分 6
level 8
看到这种问题,我马上想到丢这个网址丢给你:
0.30000000000000004.com
要解决问题很简单,把结果进行切片,步骤如下:
假设我们有两个小数加减,第一个小数点后有 a 位,第二个小数点后有 b 位。
那结果小数最多只能有 min(a, b) 位。
于是对结果进行切片,找出小数点的位置,然后切片后结果就是结果取从开始到(小数点位置 + min(a, b) )
至于为什么,下面是我自己的理解,
很有可能有错误,但是比较简单易懂:
其实,计算机的小数点是以埃及分数的形式储存的。然而是分数就意味着必定有准确度不是 100% 的问题。二进制分数中,是不能完美储存像 01, 0.2, 0.3 这种不是 1/2 的乘方合成的数的。
0.5 = 1/2 ,计算机中可能这么储存:1
0.375 = 1/4 + 1/8 ,计算机可能这么储存:011
0.3 = 1/4 + 1/32 + 1/64 + 1/512 + 1/1024 + 1/8192 + ... 无限加下去,也总是有误差。粗存起来可能是这样: 0100110011001…
2020年05月02日 02点05分 7
level 4
bigfacefishs 楼主
谢谢解释。应该是max(a,b)吧
2020年05月02日 04点05分 8
随便,反正我这里是偷换了下测量中有效数字保留的概念
2020年05月02日 05点05分
level 5
因为额22222222222222222222222222222222222222222222进制的原因,禁毒不同[滑稽]
2020年05月07日 03点05分 9
level 10
高精度算法[滑稽]
2020年05月07日 14点05分 10
level 1
我也是这样!
2021年08月27日 01点08分 12
level 1
因为二进制
2021年08月27日 01点08分 13
level 7
你JavaScript的问题关我Scratch什么事[滑稽]
2021年08月27日 03点08分 14
1