gpt4 book ai didi

linux - 归一化值,加起来大于 1

转载 作者:太空宇宙 更新时间:2023-11-04 10:44:43 24 4
gpt4 key购买 nike

我有两个文件:

文件 1:

  TOPIC:topic_0 1294
aa 234
bb 123

TOPIC:topic_1 2348
aa 833
cc 239
bb 233

文件 2:

0.1 0.2 0.3 0.4 

这只是我的文件格式。基本上,当第二列(省略第一个“TOPIC”行)为每个主题求和时,它构成为 1,因为它们是标准化值。同样,在文件 2 中,值被归一化,因此它们也构成 1。

我将文件 1 和 2 的值相乘。生成的输出文件如下所示:

aa 231
bb 379
cc 773

输出文件的第二列的总和应为 1。但很少有文件的值略大于 1,如 1.1、1.00038。如何精确地为输出文件获取 1?我应该做一些四舍五入吗?

PS:格式只是举例,取值和用词不同。这仅用于理解目的。请帮我解决这个问题。

最佳答案

Python 以 base-2 存储浮点小数。

https://docs.python.org/2/tutorial/floatingpoint.html

这意味着某些小数可能以 10 为底终止,但以 2 为底重复,因此在将它们相加时会出现浮点错误。

这涉及到一些数学问题,但想象一下以 10 为基数试图表达 2/6 的值。当您从分子和分母中消除公因子时,它是 1/3。

它是 0.333333333..... 永远重复。我稍后会解释为什么,但现在,请理解如果只存储小数点的前 16 位,例如,当您将数字乘以 3 时,您不会得到 1,您将得到 .9999999999999999 , 这有点偏离。

只要有重复的小数,就会出现这种舍入错误。

这就是为什么您的数字不以 10 进制重复,但以 2 进制重复。

小数以 10 为基数,质因数为 2^1 * 5^1。因此,对于以 10 为底的任何比率,其分母必须是 2 和 5 的组合的质因数,除此之外别无其他。

现在让我们回到 Python。每个小数都存储为二进制。这意味着为了使比率的“小数”终止,分母必须仅是 2 的质因数而不是其他任何东西。

您的数字以 2 为基数重复。

1/10 的分母为 (2*5)。2/10 减少到 1/5,分母仍然是 5。3/10...好吧,你明白了。

关于linux - 归一化值,加起来大于 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33576207/

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