在将数学公式应用到新列表中时,如何保持精度

本文关键字:精度 何保持 列表 数学公式 应用 新列表 | 更新日期: 2023-09-27 18:30:13

这个列表有5个对象,如果我用第二个对象[0]-[1]减去第一个对象,并将其放入一个新的列表中,它就可以工作了。但看看这个:[2]-[3],[4]-[5]=?请注意,我有[4]作为我的第五项,但我没有"第六项":[5]因为这个列表只有5项,我要减去什么?我会得到错误/异常吗?

        var wqat = 1.1;
        var rat = .2;
        var eat = .8;
        var baat = 1.2;
        var baat2 = 1.8;
        List<double> test = new List<double>(); 
        List<double> theOneList = new List<double>();
        theOneList.Add(wqat);
        theOneList.Add(rat);
        theOneList.Add(eat);
        theOneList.Add(baat);
        theOneList.Add(baat2);
        theOneList = theOneList.OrderByDescending(z => z).ToList();
        for (int i = 0; i < 5; i++)
        {
            test.Add(theOneList[i] - theOneList[i + 1]);
            Console.WriteLine(test[i]);
        }

我在尝试减法时遇到了一个系统超出范围的异常,我试图实现的一个可能的解决方案是,如果列表是"奇数",那么只需将"0"添加到列表中,它就会使其成为偶数个对象,这样我就可以一次平和地减去2个数字。

在将数学公式应用到新列表中时,如何保持精度

以上评论摘要:

  var wqat = 1.1;
  var rat = .2;
  var eat = .8;
  var baat = 1.2;
  var baat2 = 1.8;
  // Add's are hard to read
  List<double> theOneList = new List<double>() {
    wqat, rat, eat, baat, baat2 
  };
  // Inplace sorting, "-" for the descending order
  theOneList.Sort((x, y) => -x.CompareTo(y));
  // Or (worse) Linq, do not forget to assign the result
  // theOneList = theOneList.OrderByDescending(z => z).ToList();
  List<double> test = new List<double>(); 
  // No magic numbers (i.e. 4) - no pesky out of range exceptions
  for (int i = 0; i < theOneList.Count - 1; ++i)
    test.Add(theOneList[i] - theOneList[i + 1]);
  // Output (mix output and algorthim is not a good idea)
  Console.Write(String.Join(Environment.NewLine, test)); 

尝试

for (int i = 0; i < theOneList.Count - 1; ++i)
{
    test.Add(theOneList[i] - theOneList[i + 1]);
        Console.WriteLine(test[i]);
}

以避免索引超出范围