除法时找到准确的值
Finding accurate values while dividing
在 Python 中,除以较大的值时我得到的输出不准确,例如:-
(1227073724601519345/101)
= 12149244798034845。但是在Python中变成了
(1227073724601519345/101)
= 1.2149244798034844e+16 转换成int是12149244798034844.
如你所见
( correct_output - approx_output ) = 1
有什么办法可以避免这种情况吗?乘以更大的数字时没有这种不准确,例如:-
(123468274768408415066917747313280346049^2) - (56 * (16499142225694642619627981620326144780^2))
= 1
这是准确的。
使用整数除法,例如 1227073724601519345 // 101。
计算机通常使用 IEEE 754 浮点运算标准。这意味着浮点数的精度有限为 53 位(大约 15 或 16 位十进制数字)。
因为你已经使用 (x / y)
Python 给了你一个浮点数结果,并且结果需要超过 15 个小数位所以不准确。
但是Python也有整数除法运算符(//
)。 Python 3 中的整数是多精度数,这意味着它们可以表示任意大整数(仅受可用内存限制...)。这就是为什么在乘以大数时得到准确结果的原因。所以要得到精确的整数结果,你应该使用这个:
1227073724601519345//101
这符合预期 12149244798034845
在 Python 中,除以较大的值时我得到的输出不准确,例如:-
(1227073724601519345/101)
= 12149244798034845。但是在Python中变成了
(1227073724601519345/101)
= 1.2149244798034844e+16 转换成int是12149244798034844.
如你所见
( correct_output - approx_output ) = 1
有什么办法可以避免这种情况吗?乘以更大的数字时没有这种不准确,例如:-
(123468274768408415066917747313280346049^2) - (56 * (16499142225694642619627981620326144780^2))
= 1
这是准确的。
使用整数除法,例如 1227073724601519345 // 101。
计算机通常使用 IEEE 754 浮点运算标准。这意味着浮点数的精度有限为 53 位(大约 15 或 16 位十进制数字)。
因为你已经使用 (x / y)
Python 给了你一个浮点数结果,并且结果需要超过 15 个小数位所以不准确。
但是Python也有整数除法运算符(//
)。 Python 3 中的整数是多精度数,这意味着它们可以表示任意大整数(仅受可用内存限制...)。这就是为什么在乘以大数时得到准确结果的原因。所以要得到精确的整数结果,你应该使用这个:
1227073724601519345//101
这符合预期 12149244798034845