浮点数的下溢一般是由很多很小的数的连乘造成的,读者可以在 Python 中尝试用很多很小的数相乘,最后四舍五入后会得到 0.
一种解决办法是对乘积取自然对数,在对数中有:
lna⋅b=lna+lnbln∑ixx=∑ilnxi
避免了太小的数之间的连乘,而且当 x<e−1 时, |lnx|>1 。于是通过求对数可以避免浮点数的下溢或者浮点数舍入导致的错误。
同样,采取自然对数进行处理不会有任何损失。
浮点数的下溢一般是由很多很小的数的连乘造成的,读者可以在 Python 中尝试用很多很小的数相乘,最后四舍五入后会得到 0.
一种解决办法是对乘积取自然对数,在对数中有:
避免了太小的数之间的连乘,而且当 x<e−1 时, |lnx|>1 。于是通过求对数可以避免浮点数的下溢或者浮点数舍入导致的错误。
同样,采取自然对数进行处理不会有任何损失。