我正在嘗試將用簡(jiǎn)單語言代碼編寫的數(shù)學(xué)函數(shù)轉(zhuǎn)換為 C#,但我的代碼中遇到一個(gè)非常簡(jiǎn)單但非常令人沮喪的錯(cuò)誤,即我運(yùn)行計(jì)算的值越多,值就會(huì)不斷下降。我已附上代碼的屏幕截圖以及我所返回的內(nèi)容。我確信這只是我的代碼中的一個(gè)拼寫錯(cuò)誤,但我找不到它。如果您需要查看其他內(nèi)容,請(qǐng)告訴我這是我的代碼: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); }我想在我的代碼中實(shí)現(xiàn)什么:公式返回什么:我正在使用的輸入值:
1 回答

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