簡體   English   中英

舍入大浮點數

[英]rounding big floating point numbers

我正在實現雅可比算法來找到給定矩陣的特征值。我的問題是浮點數如1.2335604410291751e + 216.I不能舍入它們。

我嘗試了np.around和round函數,但它們沒有用。

如果您想要的只是以標准形式(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進行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM