我正在嘗試將用簡單語言代碼編寫的數學函數轉換為 C#,但我的代碼中遇到一個非常簡單但非常令人沮喪的錯誤,即我運行計算的值越多,值就會不斷下降。我已附上代碼的屏幕截圖以及我所返回的內容。我確信這只是我的代碼中的一個拼寫錯誤,但我找不到它。如果您需要查看其他內容,請告訴我這是我的代碼:public static (List<double>, List<double>) CalculateEhlersRoofingFilter(List<double> valuesList, int days) { List<double> highPassList = new List<double>(); List<double> roofingFilterList = new List<double>(); int lowerPeriod = days; int upperPeriod = Utils.MinOrMax((int)Math.Ceiling(lowerPeriod / 0.2083)); double alphaArg = Utils.ToRadians((0.707 * 360) / upperPeriod); double alphaCos = Math.Cos(alphaArg); double alpha1; if (alphaCos != 0) { alpha1 = (alphaCos + Math.Sin(alphaArg) - 1) / alphaCos; } else { alpha1 = 0; } double a1 = Math.Exp((-1.414 * 3.14159) / lowerPeriod); double b1 = 2 * a1 * Math.Cos(Utils.ToRadians((1.414 * 180) / lowerPeriod)); double c2 = b1; double c3 = (-1 * a1) * a1; double c1 = 1 - c2 - c3; for (int i = 0; i < valuesList.Count; i++) { double currentValue = valuesList.ElementAt(i); double prevValue1, prevValue2, prevFilter1, prevFilter2, prevHp1, prevHp2; if (i >= 1) { prevValue1 = valuesList.ElementAt(i - 1); prevFilter1 = roofingFilterList.ElementAt(i - 1); prevHp1 = highPassList.ElementAt(i - 1); } else { prevValue1 = currentValue; prevFilter1 = currentValue; prevHp1 = currentValue; } if (i >= 2) { prevFilter2 = roofingFilterList.ElementAt(i - 2); prevValue2 = valuesList.ElementAt(i - 2); prevHp2 = highPassList.ElementAt(i - 2); }我想在我的代碼中實現什么:公式返回什么:我正在使用的輸入值:
1 回答

慕工程0101907
TA貢獻1887條經驗 獲得超5個贊
如前所述,如果不確切知道您要查找什么,則可能很難找到問題。但是,我建議將“lowerPeriod”和“upperPeriod”更改為 double 以保持計算的一致性(讓值從右側的 int 分配),并在每個常量后放置一個“D”以強制將它們視為 double 而不是潛在的 int 或 float 等...使用“2D”是“2 作為 double”而不是“2”,后者是“int”,您必須擔心不同數字類型的交互,并希望規則按照您期望的方式工作。
- 1 回答
- 0 關注
- 164 瀏覽
添加回答
舉報
0/150
提交
取消