首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在n位损坏或丢失时查找浮点数的精度

如何在n位损坏或丢失时查找浮点数的精度
EN

Stack Overflow用户
提问于 2017-02-23 19:14:05
回答 1查看 54关注 0票数 2

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

我正在将解析解与模拟解的结果进行比较。然而,在某些情况下,我对模拟结果的准确性有一些怀疑。

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-23 20:29:12

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

更准确地说,这个错误与Number_to_ verify * 2**(-26) # 2e-05有关。

一种有效的技术方法:

代码语言:javascript
运行
复制
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')

代码语言:javascript
运行
复制
##12345678901234567890123456 12345678901234567890123456
0b11001111111000111111010010 00000000000000000000000000
0b11001111111000111111010010 01110010011100010011111101
0b11001111111000111111010010 11111111111111111111111111

1663.1235961914062
1663.123609834
1663.123626708984
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42414158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档