2015-07-14 15 views
6

Trong khi rối tung xung quanh với Swift, tôi nhận thấy rằng khi tràn số nguyên 64 bit, tôi nhận được lỗi sau:Integer overflow cho EXC_BAD_INSTRUCTION trong Swift

file:///Users/user/Documents/playground/MyPlayground.playground/: error: Playground execution aborted: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).

func fibonacci(which: Int) -> (fibOf: Int, isEqualTo: Int) { 
    var i = 1, j = 1 

    for var k = 2; k < which; k += 1 { 
     let tmp = i + j // this line is highlighted when error occurs 
     j = i 
     i = tmp 
    } 

    return (which, i) 
} 

print (fibonacci(92)) 
print (fibonacci(93)) // this triggers an error 

Cuộc gọi đầu tiên, tức là với 92 như là đối số , sẽ chạy tốt. Tuy nhiên, khi cung cấp giá trị 93, tôi nhận được lỗi EXC_BAD_INSTRUCTION không liên quan. Đây có phải là lỗi hay không? Thông thường tôi mong đợi nó tràn.

+0

Tôi thấy điều này bởi googling "Swift tràn số nguyên": https://developer.apple .com/library/ios/documentation/Swift/Khái niệm/Swift_Programming_Language/AdvancedOperators.html # // apple_ref/doc/uid/TP40014097-CH27-ID37 –

Trả lời

9

Đó là hành vi mong đợi. Nếu bạn muốn tràn, bạn cần sử dụng overflow operators.

  • Overflow Ngoài (&+)
  • Overflow trừ (&-)
  • Overflow nhân (&*)
+2

Hmmm, tôi hiểu. Tuy nhiên, thông báo lỗi không trực quan. Cảm ơn – TGO