微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在划分时找到准确的值

如何解决在划分时找到准确的值

在 Python 中,在划分更大的值时,我得到的输出不准确,例如:-

(1227073724601519345/101) = 12149244798034845。但在 Python 中它变成了

(1227073724601519345/101) = 1.2149244798034844e+16 转换为 int 是 12149244798034844。

如你所见

( correct_output - approx_output ) = 1

有什么办法可以避免这种情况吗?在乘以更大的数字时没有这种不准确,例如:-

(123468274768408415066917747313280346049^2) - (56 * (16499142225694642619627981620326144780^2)) = 1

这是准确的。

解决方法

计算机通常使用 IEEE 754 标准进行浮点运算。这意味着浮点数的精度有限,为 53 位(大约 15 或 16 位十进制数字)。

由于您使用了 int getSubsetwithsumk(int arr[],int n,int k) { int t[n+1][k+1]; //initialisation for(int i = 0 ; i < n + 1 ; i++){ for(int j = 0 ; j < k + 1 ; j++){ if(i == 0){ t[i][j] = 0; } if(j == 0){ t[i][j] = 1; } } } for(int i = 1 ; i < n + 1 ; i++){ for(int j = 1 ; j < k + 1 ; j++){ if(arr[i-1] <= j) t[i][j] = t[i-1][j - arr[i-1]] + t[i-1][j]; else{ t[i][j] = t[i-1][j]; } } } return t[n][k]; } ,Python 给了您一个浮点结果,并且该结果需要超过 15 位十进制数字,因此无法准确。

但是 Python 也有一个整数除法运算符 ((x / y))。 Python 3 中的整数是多精度数,这意味着它们可以表示任意大整数(仅受可用内存限制...)。这就是为什么在乘以大数时得到准确结果的原因。所以要获得精确的整数结果,你应该使用这个:

//

按预期给出 1227073724601519345//101

,

使用整数除法,例如,1227073724601519345 // 101。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。