func sign<T: SignedNumberType>(value: T) -> Int { return value == (0 as T) ? 0 : (value > 0 ? 1 : -1) }