为了账号安全,请及时绑定邮箱和手机立即绑定

将 Easy Language 代码转换为 C# 代码导致了一些问题

将 Easy Language 代码转换为 C# 代码导致了一些问题

C#
四季花海 2023-07-22 18:34:36
我正在尝试将用简单语言代码编写的数学函数转换为 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”,您必须担心不同数字类型的交互,并希望规则按照您期望的方式工作。



查看完整回答
反对 回复 2023-07-22
  • 1 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信