2017-05-09 9 views
-2

私はパーセンテージについて何かしようとしていましたが、私は何か問題があったと思います。不正インストラクションarc4random_uniform

let randomNum = arc4random_uniform(25) + 71 
let wrongNumber = 100 - Int(randomNum) 
let firstWrong = wrongNumber - 10 
var first = arc4random_uniform(UInt32(firstWrong)) 
var second = arc4random_uniform(UInt32(wrongNumber) - first) 
var third = arc4random_uniform(UInt32(wrongNumber) - (first + second)) 
let plus = (UInt32(wrongNumber) - (first + second + third))/3 
first = first + plus 
second = second + plus 
third = third + plus 
let total = randomNum + first + second + third 
if (total < 100) { 
    first += (100 - total) 
} 

It sometimes gives this BAD INSTRUCTION error

And it usually works fine

+0

スクリーンショットを投稿してコードを投稿しないでください。あなたは符号なし整数「UInt32」から減算しようとしていますが、負の数に達すると明らかにクラッシュします –

+0

ありがとうございました。それは最初の質問でした – Teth

答えて

2

あなたのロジックは完全に欠陥がある、最初の数行を考えてみます。

let randomNum = arc4random_uniform(25) + 71 // values 71 ... 95 
let wrongNumber = 100 - Int(randomNum) //values 5 ... 29 
let firstWrong = wrongNumber - 10 // -5 ... 19 

最大randomNum95です。次にwrongNumber5であり、firstWrong-5です。

その後

var first = arc4random_uniform(UInt32(firstWrong)) 

符号なし数に-5をキャストするときにクラッシュすることがあります。

値がネガティブになると、他の行でも同様のエラーが発生する可能性があります。

+0

ありがとう、 – Teth