问题解决:无法获取本地变量或参数的值,因为它在此指令指针中不可用,可能是因为它已经被优化掉了。

2 篇文章 0 订阅

本人遇到的这个问题是使用迭代程序造成内存泄漏(批量转换时,在数据量较小时无问题,超过一定数量就崩溃),将其改成循环程序解决!实例如下:
递归算法:

public  double GetBottomLatitude(double Bf0, double x, double a, double f, double[] gaussCoefficient) {
            double e1Square = 2 * f - f * f;// first eccentricity square
            double FB0 = a * (1 - e1Square) * (gaussCoefficient[0] * Bf0 - gaussCoefficient[1] * Math.Sin(2 * Bf0) + gaussCoefficient[2] * Math.Sin(4 * Bf0) - gaussCoefficient[3] * Math.Sin(6 * Bf0) + gaussCoefficient[4] * Math.Sin(8 * Bf0) - gaussCoefficient[5] * Math.Sin(10 * Bf0) + gaussCoefficient[6] * Math.Sin(12 * Bf0));
            double FB1 = a * (1 - e1Square) * (gaussCoefficient[0] - 2 * gaussCoefficient[1] * Math.Cos(2 * Bf0) + 4 * gaussCoefficient[2] * Math.Cos(4 * Bf0) - 6 * gaussCoefficient[3] * Math.Cos(6 * Bf0) + 8 * gaussCoefficient[4] * Math.Cos(8 * Bf0) - 10 * gaussCoefficient[5] * Math.Cos(10 * Bf0) + 12 * gaussCoefficient[6] * Math.Cos(12 * Bf0));
            double Bf1 = Bf0 + (x - FB0) / FB1;
            if (Math.Abs(Bf0 - Bf1) < 0.00000000000005) {
                return Bf1;
            } else {
                return GetBottomLatitude(Bf1, x, a, f, gaussCoefficient);
            }
        }

循环算法:

public  double GetBottomLatitude(double Bf0, double x, double a, double f, double[] gaussCoefficient) {
            double e1Square = 2 * f - f * f;// first eccentricity square
            double FB0 = a * (1 - e1Square) * (gaussCoefficient[0] * Bf0 - gaussCoefficient[1] * Math.Sin(2 * Bf0) + gaussCoefficient[2] * Math.Sin(4 * Bf0) - gaussCoefficient[3] * Math.Sin(6 * Bf0) + gaussCoefficient[4] * Math.Sin(8 * Bf0) - gaussCoefficient[5] * Math.Sin(10 * Bf0) + gaussCoefficient[6] * Math.Sin(12 * Bf0));
            double FB1 = a * (1 - e1Square) * (gaussCoefficient[0] - 2 * gaussCoefficient[1] * Math.Cos(2 * Bf0) + 4 * gaussCoefficient[2] * Math.Cos(4 * Bf0) - 6 * gaussCoefficient[3] * Math.Cos(6 * Bf0) + 8 * gaussCoefficient[4] * Math.Cos(8 * Bf0) - 10 * gaussCoefficient[5] * Math.Cos(10 * Bf0) + 12 * gaussCoefficient[6] * Math.Cos(12 * Bf0));
            double Bf1 = Bf0 + (x - FB0) / FB1;
            while (Math.Abs(Bf0 - Bf1) >0.00000000000005)
            {
                Bf0 = Bf1;
                FB0 = a * (1 - e1Square) * (gaussCoefficient[0] * Bf0 - gaussCoefficient[1] * Math.Sin(2 * Bf0) + gaussCoefficient[2] * Math.Sin(4 * Bf0) - gaussCoefficient[3] * Math.Sin(6 * Bf0) + gaussCoefficient[4] * Math.Sin(8 * Bf0) - gaussCoefficient[5] * Math.Sin(10 * Bf0) + gaussCoefficient[6] * Math.Sin(12 * Bf0));
                FB1 = a * (1 - e1Square) * (gaussCoefficient[0] - 2 * gaussCoefficient[1] * Math.Cos(2 * Bf0) + 4 * gaussCoefficient[2] * Math.Cos(4 * Bf0) - 6 * gaussCoefficient[3] * Math.Cos(6 * Bf0) + 8 * gaussCoefficient[4] * Math.Cos(8 * Bf0) - 10 * gaussCoefficient[5] * Math.Cos(10 * Bf0) + 12 * gaussCoefficient[6] * Math.Cos(12 * Bf0));
                Bf1 = Bf0 + (x - FB0) / FB1;
            }
            return Bf1;
        }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值