Objective C Math - 几何序列结果

时间:2016-12-14 07:43:39

标签: objective-c macos math

对于我的应用程序(OSX,而​​不是IOS),我有一个如下生成的几何序列(存储在容器数组中):

- (void)initContainerFor:(NSInteger)maxRows
{

self.container = [[NSMutableArray alloc] init];
NSInteger start = [self.firstTextFieldValue integerValue];
NSInteger ratio = [self.secondTextFieldValue integerValue];

// ASCENDING
for (NSInteger i = 1; i < (maxRows +1 ); i++)
{
    NSInteger currentValue = start * pow(ratio,i-1);
    [self.container addObject:currentValue];
}
}

用户可以输入&#34;开始&#34;和&#34;比率&#34;整数。如果超出限制(MAX_INT),我想给出反馈。我写了这个函数:

- (BOOL)maxCheck
{

    if ([self.container lastObject] > INT_MAX)
        return false;

    return true;
}

但这似乎不起作用。如果我输入2表示开始,200表示比例,我有这个容器内容:

Container: (
    2,
    400,
    80000,
    16000000,
    "-1094967296",
    49872896,
    1384644608,
    2051014656,
    "-2113929216",
    0
)

请帮助理解我在容器中看到的内容(字符串??)以及如何正确检查最大值。

2 个答案:

答案 0 :(得分:1)

从数组日志中可以看出,当下一个元素变为负数时,实际上超过了INT_MAX限制两次。因此,您只需将检查添加到initContainer:方法 - 如果元素小于先前的INT_MAX限制。

提示:INT_MAX是签名值。

答案 1 :(得分:0)

您无法将溢出后的值与INT_MAX进行比较,因为溢出已经发生。或者换句话说,通过它的定义和语义,没有整数可以大于INT_MAX

您可以测试的是

[self.container lastObject] > INT_MAX/ratio

找到在下一步中会导致溢出的序列元素。