Должен ли я определять все значения как Double или mixed Double и Float, когда эти значения будут вычисляться часто? - PullRequest
0 голосов
/ 23 апреля 2020

В моей программе есть некоторые десятичные значения, которые должны быть определены с плавающей запятой относительно их диапазона.

Но в некоторых вычислениях (умножить) диапазоны могут быть больше 10 ^ 38, поэтому мне нужно перед вычислением конвертируйте их в Double.

Скажите, что значения

let a: Float // maximum: 10
let b: Float // maximum: 10^20
let c: Float // maximum: 10^30

и расчеты похожи на

func multiplyAB() -> Float {
  return a * b
}

func multiplyBC() -> Double {
  return Double(b) * Double(c)
}

let d = multiplyBC()

Что меня беспокоит, так это какой лучше с точки зрения производительности? Конвертировать из Float в Double во время вычисления или определить a, b, c как Double?

Другими словами, является ли преобразование из Float в Double удобной работы в CPU (как reallo c) память, обрабатывать точность и тому подобное) сравнивая, чтобы вычислить все числа в Double?

Кстати, почему Apple использует Double в качестве основного значения для CGFloat? Максимальное значение для Float составляет 10 ^ 38, что довольно много по отношению к iPhone размерам экрана и пикселям нельзя плавать (10.111 и 10.11 не имеют значения, верно?).
В чем причина этого?

1 Ответ

2 голосов
/ 23 апреля 2020

из ЯЗЫК ПРОГРАММИРОВАНИЯ SWIFT

"ПРИМЕЧАНИЕ

Double имеет точность не менее 15 десятичных цифр, тогда как точность Float может быть всего 6 десятичные цифры. Соответствующий тип с плавающей запятой, который нужно использовать, зависит от природы и диапазона значений, с которыми необходимо работать в коде. В ситуациях, когда подходит любой из этих типов, предпочтительным является Double."

...