c#失去了精度,使得方程结果为0
本文关键字:方程 结果 失去 精度 | 更新日期: 2023-09-27 17:49:19
我有一个精度问题。我将很多非常低的数字,比如0.000001
,彼此相乘很多次(有时在500-1000
左右),因此我失去了精度。我已经在double
(在字典中)得到了我的数字。
有办法解决这个问题吗?下面是代码:
foreach (var word in fileDictionary)
{
dictionaryTotal.TryGetValue(word.Key, out percent);
temp = percent;
A *= temp;
B *= (1 - temp);
}
A/B
在本例中变为0.0
。
您可以使用对数,并在需要时稍后处理结果。
foreach (var word in fileDictionary)
{
dictionaryTotal.TryGetValue(word.Key, out percent);
temp = percent;
A += Math.Log10(temp);
B += Math.Log10(1 - temp);
}
然后您可以操作得到的对数,而不是得到的数字。
如果你期望最终的A/B结果在双量级范围之外,最好的解决方案是使用对数,如之前的答案所建议的。
如果temp
变化,则不需要A或B,并且最终的A/B结果预计将是双范围,或者如果不是,则可以将其视为零,您可以通过直接处理比率来获得它:
ratio = ratio * temp / (1 - temp)