Objective-C指数法失败

时间:2014-03-25 01:11:37

标签: objective-c math

对于练习,我决定制作一个指数方法来处理事情,如果我想做20 ^ 2,这是20 * 20,所以当然这应该是400.这是我的方法:

 #import "Math.h"

 @implementation Math

 +(double)exponent:(double)n :(int)e{
     double product = n;
     for(int x=0; x<e; x++){
         product *= product;
     }
     return product;
 }

 @end

然后我就这样使用它:

         double product = [Math exponent:20 :2];
         NSLog(@"product = %g",product);

奇怪的是,每次都是160000而不是400.我做错了什么?

据我所知,Objective-C中没有指数运算符,但是'^'是什么。我用它来做20 ^ 2,但它出现了22.为什么会这样?

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

您可以使用pow(n, e)而不是实现自己的{{3}}。这是math.h中定义的C方法。由于Objective-C是C语言的超集,因此您可以使用C语法而不会出现问题:

double product = pow(20, 2);
NSLog(@"product = %lf", product);
顺便说一句,你自己实现的错误是product *= producte次。正确的陈述应该是product *= n

答案 1 :(得分:1)

您的for循环错误。

double product = n;
for(int x=0; x<e; x++){
    product *= product;
}

原值: 产品= 20。

X = 0; 产品=产品*产品。 (即产品= 20 * 20 = 400)

X = 1; 产品=产品*产品。 (即产品= 400 * 400 = 160000)

你的循环应该是:

double product = n;
for(int x=1; x<e; x++){
    product *= n;
}

请注意,for循环以x = 1开头,而该产品product *= n; 这条路: 产品= 20。

X = 0; 产品=产品* e。 (即产品= 20 * 20 = 400)

答案 2 :(得分:1)

@jer_francis,这不是这个问题的答案,但是我看到你问了一个关于什么是一个好的软件开发笔记本电脑的问题,这个笔记本电脑已经过时了。

我建议您查看The Tech Guy。这是一个全国广播的电台节目,技术人员是Leo Laporte。他不是个人的开发者,但他对技术有广泛的了解,可能会给你一些很好的建议。

你必须打电话到节目(这只是在周末),但如果你坚持下去,你很有可能进入。如果节目没有足够空气让你听广播,你仍然可以在线收听。听取其他一切的意见很有意思。

每个人:很抱歉把这个作为一个答案,但我不确定我是否能够做一个体面的工作来指导这个年轻人找到一个好的来源帮助他回答他的非SO适当的问题被删除了。