首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSDecimalNumber执行并发循环

使用NSDecimalNumber执行并发循环
EN

Stack Overflow用户
提问于 2014-08-06 19:27:47
回答 1查看 109关注 0票数 0

我正在将收益率转换为成熟度计算,从使用浮点数转换为NSDecimalNumbers。循环工作,但经常挂断。我提供了以下守则:

代码语言:javascript
复制
///////////////////////  YTM TEST ////////////////////////////////

 NSDecimalNumber *years = [NSDecimalNumber decimalNumberWithString:@"10"];
 NSLog(@"Years are: %@", years);


NSDecimalNumber *temp9 = [NSDecimalNumber decimalNumberWithString:@"2"];
    NSLog(@"Coupons per Year: %@", temp9);

NSDecimalNumber *temp2 = [NSDecimalNumber decimalNumberWithString:@"100"]; 
    NSLog(@"Bond Price: %@", temp2);

NSDecimalNumber *temp3 = [NSDecimalNumber decimalNumberWithString:@"100"]; 
    NSLog(@"Bond Par: %@", temp3);

NSDecimalNumber *temp1 = [NSDecimalNumber decimalNumberWithString:@"5"]; 
    NSLog(@"Coupon Interest Rate Input: %@", temp1);

temp1 = [temp1 decimalNumberByDividingBy:[NSDecimalNumber decimalNumberWithString:@"100"]];
    NSLog(@"Coupon Interest Rate: %@", temp1


//temp5 = 0.0; // the initial or lower ytm guess
NSDecimalNumber *temp5 = [NSDecimalNumber decimalNumberWithString:@"0.0"];         

NSLog(@"Initial YTM Calc Guess: %@", temp5);

NSDecimalNumber *finalCalc = [NSDecimalNumber decimalNumberWithString:@"0.0"];
NSLog(@"Initial finalCalc Value is: %@", finalCalc);

{
    do
{
    //if (counter < 300000)


    {

       //temp5 = temp5 + .000005;    // .00005;
        NSDecimalNumber *constant = [NSDecimalNumber decimalNumberWithString:@".000005"];
            //NSLog(@"YTM Calc Constant: %@", constant);

        temp5 = [temp5 decimalNumberByAdding:constant];
            //NSLog(@"Add Constant to Initial Guess: %@", temp5);

       /// Calc 1 & 2
        NSDecimalNumber *cashFlow = [[temp3 decimalNumberByMultiplyingBy:temp1]decimalNumberByDividingBy:temp9];
            //NSLog(@"Cashflow per Coupon Period: %@", cashFlow);

        //Calc 3

        NSDecimalNumber *constantOfOne = [NSDecimalNumber decimalNumberWithString:@"1"];
        NSDecimalNumber *onePlusGuess = [temp5 decimalNumberByAdding:constantOfOne];
        //NSLog(@"One Plus Guess: %@", onePlusGuess);

        // Calc 4

        NSDecimalNumber *thePower = [years decimalNumberByMultiplyingBy:temp9];
        //NSLog(@"thePower: %@", thePower);

        // Calc 5


        NSDecimalNumber *onePlusGuessRaised = [onePlusGuess decimalNumberByRaisingToPower:[thePower floatValue]];
        //NSLog(@"One Plus Guess Raised to Power: %@", onePlusGuessRaised);


        // Calc 6

        NSDecimalNumber *divideIntoOne = [constantOfOne decimalNumberByDividingBy:onePlusGuessRaised];
        //NSLog(@"Divide into One: %@", divideIntoOne);

        //Calc 7

        NSDecimalNumber *complexResult = [constantOfOne decimalNumberBySubtracting:divideIntoOne];                            //NSLog(@"Complex Calc Result: %@", complexResult);


       // Calc 8

        NSDecimalNumber *divideByGuess = [complexResult decimalNumberByDividingBy:temp5];
        //NSLog(@"Divide into One: %@", divideByGuess);


        //Calc 8

        NSDecimalNumber *multipleLeftSide = [cashFlow decimalNumberByMultiplyingBy:divideByGuess];
        //NSLog(@"left Side Done: %@", multipleLeftSide);


        //Calc 9

        NSDecimalNumber *divideIntoPar = [temp3 decimalNumberByDividingBy:onePlusGuessRaised];
        //NSLog(@"Divide into Par: %@", divideIntoPar);

        //Calc 10

        finalCalc = [multipleLeftSide decimalNumberByAdding:divideIntoPar];
       // NSLog(@"Final part of Calc = : %@", finalCalc);


     }



}


while (finalCalc > temp2);


    NSLog(@"I'm Done!");

}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-13 22:27:05

我终于解决了“边做边做”的处理在不同地方停止循环的问题。在一些情况下,它会运行2分钟或更长时间。问题是,我的"While“语句while (finalCalc >temp2)不是比较两个NSDecimalNumbers的值,而是比较指针地址。经过大量的研究和测试,while语句的正确编码是"while (finalCalc compare:temp2 2 == NSOrderedDescending);“,我已经多次测试过它是否工作得很好。我的原始代码编译时不会出现错误或警告。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25168580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档