2016-12-14 6 views
0

結果、私は(コンテナの配列に格納されている)幾何学的なシーケンスは次のように生成されています:Objective Cの数学 - 幾何学的なシーケンスは、私のアプリ(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]; 
} 
} 

ユーザーは、「スタート」を入力することができますし、 "比率 "整数である。限界(MAX_INT)を超えた場合にフィードバックを出したいと思います。私はこの関数を書いた:

しかし、これは動作していないようだ。私は開始と比率のための200のために2を入力した場合、私はこのコンテナのコンテンツを持っている:

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

私はコンテナ(文字列??)で見るかを理解するのに役立つと最大値の正しいチェックを取得する方法をしてください。

答えて

0

オーバーフロー後の値をINT_MAXと比較することはできません。オーバーフローが既に発生しているためです。言い換えれば、非常に定義と意味論によって、整数はINT_MAXより大きいことはありません。あなたがテストすることができますどのような

は、次のステップでオーバーフローを引き起こすシーケンス要素を見つけるために

[self.container lastObject] > INT_MAX/ratio 

です。

+0

それはトリックでした。ありがとうございました。 –

1

配列のログからわかるように、実際には、次の要素が負になるINT_MAX制限を2回超えています。したがって、単にinitContainerにチェックを追加することができます:method - 要素が以前のINT_MAX制限に達していない場合、

ヒント:INT_MAXはで、という値です。

関連する問題