gpt4 book ai didi

python - 如果 n 位损坏或丢失,如何找到 float 的精度

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:53 25 4
gpt4 key购买 nike

我目前正在使用来自 scipy、Python 的稀疏求解器求解稀疏线性系统。

我正在将解析解与模拟解的结果进行比较。但是,在某些情况下,我对模拟结果的精度有些怀疑。

很难估计 condition number对于稀疏矩阵。我可以找到矩阵的最大特征值,但对最小特征值的搜索永远不会收敛,所以我什至不能使用 max(eig)/min(eig) = 条件。使用另一个近似值,即 max(abs(diag))/min(abs(diag)),我得到一个条件数,其中 log2 给出 26,所以我启发式地说我的结果损失了大约 26 位精度。

我的问题如下:假设我的计算是用 float64 完成的(numpy),并且缺少 26 位,我如何计算出我可以信任我的数字的哪些小数位?例如,如果我的模拟给出的答案是:

Number_to_verify = 1663.123609834 (float64)最后 26 位可能已损坏,我可以信任这个数字的哪一部分?

最佳答案

粗略地说,float64 有 52 位尾数和大约 16 位有效的十进制数字。因此,如果您确定 26 位已损坏,请保留 8 位十进制数字。

更准确地说,错误是关于 Number_to_verify * 2**(-26) # 2e-05

验证的技术方法:

f=1663.123609834
num,den=f.as_integer_ratio()
p=2**26
ninf=n//p*p
nsup=ninf|(p-1)
print(bin(ninf),bin(n),bin(nsup),sep='\n')
print(ninf/d,n/d,nsup/d,sep='\n')

为了

##12345678901234567890123456 12345678901234567890123456
0b11001111111000111111010010 00000000000000000000000000
0b11001111111000111111010010 01110010011100010011111101
0b11001111111000111111010010 11111111111111111111111111

1663.1235961914062
1663.123609834
1663.123626708984

关于python - 如果 n 位损坏或丢失,如何找到 float 的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42414158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com