A IEEE 754 32-разрядное число с плавающей запятой число имеет 24 значащих бита для мантиссы, этого недостаточно для точного хранения 10-значного целого числа:
print(0xFFFFFFFF) // 4294967295
print(Float(0xFFFFFFFF)) // 4.2949673e+09
print(Int(Float(0xFFFFFFFF))) // 4294967296
Это победилоне влияет на ваш код, потому что
Float(arc4random()) / Float(0xFFFFFFFF)
по-прежнему число с плавающей запятой в диапазоне от 0,0 до 1,0.Изменение вычисления на
return CGFloat(arc4random()) / 0xFFFFFFFF
исправит предупреждение на 64-битных платформах: целочисленная константа теперь преобразуется в (64-битную) Double
.
Но с Swift4.2 вы можете полностью избежать этой проблемы, используя новый Random
API :
func random(min: CGFloat, max: CGFloat) -> CGFloat {
return CGFloat.random(in: min...max)
}