小数精度丢失问题
例子:
x := 74.96 y := 20.48 b := x - y fmt.Println(b) //output: 54.47999999999999
上面是使用普通编码
硬编码的方式如下:
fmt.Println(74.96-20.48) //54.48
百度关于硬编码的解释一堆话

以上的话对于本问题没有任何卵用。
最关键的就两句如下
1、编码方式不同:
普通编码:使用CPU进行编码。
硬编码:使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等。
为什么普通编码会出现精度丢失问题,是因为使用CPU编码时 1011101.101 这个二进制是我瞎乱打的,但是在CPU编码就是使用"."点后几位数 来表示小数部分。
“.”后部分在计算的时候是 :1*2^-1+0*2^-2+1*2^-3 来计算的,当然这些话也没什么卵用最关键就一句,在有限小数情况下二进制只能表示部分小数,也就是说你需要的小数二进制没法表示,所以会出现精度丢失问题。
那么硬编码不会出问题因为他用的不是CPU编码,那么不用CPU是咋进行编码的我没兴趣知道,就这样。
解决方案还是要写一下,
将小数变为整数再变为小数就这样,比如计算100.1 +0.1
变为 ((100.1*10) +0.1) / 10
浙公网安备 33010602011771号