四舍五入大浮点数
rounding big floating point numbers
我正在实施 Jacobian 算法来查找给定的特征值 matrix.My 问题是像 1.2335604410291751e+216.I 这样的浮点数不能四舍五入。
我尝试了 np.around 和舍入函数,但它们没有用。
如果你只想对标准形式 (m × bⁿ) 的数字进行 m 舍入,你可以这样做,对于 m、b 和 n数、底数和指数分别为:
import math
def round_(m, d, b = 10):
n = math.floor(math.log(abs(m), b),)
return float(round(m * (b ** (d - n))) * (b ** - (d - n)))
一些测试输出:
>>> print(round_(1.23456783456787434567e-22, 1))
1.2299999999999998e-22
>>> round_(-1.23456783456787434567e+159, 7)
-1.2345678e+159
>>> round_(1.23456783456787434567e+50, 6)
1.234568e+50
>>> round_(-0.23456783456787434567e+256, 5)
-2.34568e+255
>>> round_(1.23456783456787434567e+255, 4)
1.2346e+255
>>> round_(0.23456783456787434567e+272, 3)
2.346e+271
>>> round_(1.23456783456787434567e-23, 2)
1.235e-22
>>> round_(-1.23456783456787434567e+251, 1)
-1.2e+251
可能会发生溢出(参见输出 #1)。
使用 Python 3.7.
测试
我正在实施 Jacobian 算法来查找给定的特征值 matrix.My 问题是像 1.2335604410291751e+216.I 这样的浮点数不能四舍五入。
我尝试了 np.around 和舍入函数,但它们没有用。
如果你只想对标准形式 (m × bⁿ) 的数字进行 m 舍入,你可以这样做,对于 m、b 和 n数、底数和指数分别为:
import math
def round_(m, d, b = 10):
n = math.floor(math.log(abs(m), b),)
return float(round(m * (b ** (d - n))) * (b ** - (d - n)))
一些测试输出:
>>> print(round_(1.23456783456787434567e-22, 1))
1.2299999999999998e-22
>>> round_(-1.23456783456787434567e+159, 7)
-1.2345678e+159
>>> round_(1.23456783456787434567e+50, 6)
1.234568e+50
>>> round_(-0.23456783456787434567e+256, 5)
-2.34568e+255
>>> round_(1.23456783456787434567e+255, 4)
1.2346e+255
>>> round_(0.23456783456787434567e+272, 3)
2.346e+271
>>> round_(1.23456783456787434567e-23, 2)
1.235e-22
>>> round_(-1.23456783456787434567e+251, 1)
-1.2e+251
可能会发生溢出(参见输出 #1)。
使用 Python 3.7.
测试