В чем разница между типами Float и Double в Swift?

«В чем разница между типами Float и Double в Swift?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Float и Double — это типы с плавающей запятой, отличающиеся размером в памяти, точностью и диапазоном представляемых значений.

  • Float (одинарная точность): 32 бита (~6-9 значащих десятичных цифр).
  • Double (двойная точность): 64 бита (~15-17 значащих десятичных цифр).

Сравнение характеристик:

// Размер в памяти
MemoryLayout<Float>.size  // 4 байта
MemoryLayout<Double>.size // 8 байта

// Диапазон значений
Float.greatestFiniteMagnitude  // ~3.4e38
Double.greatestFiniteMagnitude // ~1.8e308

// Точность
let piFloat: Float = 3.141592653589793
let piDouble: Double = 3.141592653589793
print(piFloat)  // 3.1415927 (округление на 8-й цифре)
print(piDouble) // 3.141592653589793

Когда что использовать:

  • Используйте Double по умолчанию в Swift. Это тип, используемый во всех стандартных библиотечных функциях (например, sqrt(_:)), он обеспечивает более высокую точность и уменьшает накопление ошибок округления.
  • Используйте Float когда критически важна:
    • Экономия памяти (большие массивы данных, например, в GPU-вычислениях, компьютерной графике).
    • Совместимость с внешними API или форматами данных, требующими 32-битных значений.

Важно: Из-за ограниченной точности сравнение чисел с плавающей запятой на равенство (==) ненадежно. Всегда используйте сравнение с допуском:

let a: Double = 0.1 + 0.2
let b: Double = 0.3
let areEqual = abs(a - b) < 0.000001 // true