Objective-C で 16 進計算機を作成しています。私の問題は、乗算するとオーバーフローする long long 値を処理することです。
追加する前に値を追加すると、このようなことで値がオーバーフローしないことを確認します。
long long leftToAdd = LLONG_MAX - self.runningTotal;
if (self.selectedNumber <= leftToAdd) {
self.runningTotal += self.selectedNumber;
} else {
self.selectedNumber -= leftToAdd;
self.runningTotal = self.selectedNumber-1;
self.overflowHasOccured = YES;
}
値がオーバーフローする場合は、(実際にはオーバーフローせずに) オーバーフロー値を取得し、オーバーフロー通知を追加します。これと同じタイプのことを行う方法を見つけたいと思っていましたが、乗算のために、誰かがこれを手伝ってくれますか?
これが私がこれまでに持っているものです。
// if - value would not overflow //
if (self.runningTotal > 0 && self.selectedNumber > 0
&& LLONG_MAX/self.runningTotal >= self.selectedNumber) {
self.runningTotal *= self.selectedNumber;
// else - handle overflow //
} else {
}
副次的な質問として、除算について同様のチェックを行う必要がありますか?