Calculate

数字计算之分摊

July 20, 2022
Number
Calculate

背景:分多次把一批货全部出清。 要求:需要确保这批货多次出清跟一次出清收的钱一样。 现有三个数字(可整数,可小数):a b c,其中:a 为数量,b 为价格,c 为折扣。 则总额为: t, t = a*b*c 假设分三次,每次数量为:a1 a2 a3,则有:a = a1 + a2 + a3 直接计算: 第 1 次. a1*b*c 第 2 次. a2*b*c 第 3 次. a3*b*c (a1+a2+a3)bc 不就等于 abc 了吗? 但是,如果考虑到小数乘法计算时的精度,比如:1.22*2.33 相乘后再取精度(保留两位小数),不就会导致数量误差了吗? 那如果取精度导致结果误差,那我不取精度,直接用所有小数位数来计算呢。 虽说可以,但小数位数是有可能非常多的,占用的空间也是一笔不小的开销。 引入中间量(可称为’余额’): x y z x = a y = x*b z = y*c 第 1 次. x1 = (x-a1) y1 = (y-y*a1/x) z1 = (z-z*a1/x) t1 = z*a1/x 第 2 次. ...