[swift-users] abs() Bug?

Kelvin Ma kelvin13ma at gmail.com
Tue Dec 12 15:17:26 CST 2017


this is correct behavior. −Int.min can’t be represented in signed 2’s
complement because the range of Int is 2^(bitWidth - 1) ..< 2^(bitWidth - 1)
so it correctly traps on SIGILL. what i’m more worried about is why
abs(Int32.min) is returning a value for you,, but mine traps as it should.

On Tue, Dec 12, 2017 at 2:06 PM, C. Keith Ray via swift-users <
swift-users at swift.org> wrote:

> Should these be consistent?
>
> All crashing or none crashing?
>
> print(abs(Int8.min)) // crash
>
> print(abs(Int16.min)) // crash
>
> print(abs(Int32.min)) // prints -2147483648 <(214)%20748-3648>
>
> print(abs(Int64.min)) // crash
>
> Should this be reported by Radar or another mechanism?
>
> I'm using this as a replacement:
>
> func safeAbs<T: SignedInteger & FixedWidthInteger>(_ i: T) -> T {
>     if i >= 0 {
>         return i
>     } else if i == T.min { // can't negate this value
>         // return i   // unconverted, violates postcondition,
> assert(result >= 0)
>         // return 0   // or return an arbitrary "safe" value
>         return -(1+i) // or return approximately the right value
>     } else {
>         return -i
>     }
> }
>
> print(safeAbs(Int8.min)) // prints *127 *
> print(safeAbs(Int16.min)) // prints 32767
> print(safeAbs(Int32.min)) // prints 2147483647 <(214)%20748-3647>
> print(safeAbs(Int64.min)) // prints 9223372036854775807
>
>
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20171212/70100937/attachment.html>


More information about the swift-users mailing list