Как найти максимальное значение для Double и Float в Swift

Текущее обучение Swift, есть способы найти максимальное и минимальное значение для разных типов Целое, таких как Int.max и Int.min.

Есть ли способ найти максимальное значение для Double и Float? Кроме того, в каком документе я должен ссылаться на этот вопрос? В настоящее время я читаю Apple Язык быстрого языка.

Ответ 1

Пока theres no Double.max, он определен в заголовке C float.h, доступ к которому вы можете получить в Swift через import Darwin.

import Darwin

let fmax = FLT_MAX
let dmax = DBL_MAX

Это примерно 3.4 * 10^38 и 1.79 * 10^308 соответственно.

Но помните, что это не так просто с числами с плавающей запятой (это никогда не было просто с числами с плавающей запятой). Когда вы держите цифры такими большими, вы теряете точность аналогичным образом, чтобы потерять точность с очень маленькими числами, поэтому:

let d = DBL_MAX
let e = d - 1.0
let diff = d - e
diff == 0.0  // true

let maxPlusOne = DBL_MAX + 1
maxPlusOne == d  // true

let inf = DBL_MAX * 2
// perhaps infinity is the "maximum" 
inf == Double.infinity  // true

Итак, прежде чем вы приступите к некоторым вычислениям, которые, возможно, будут соответствовать этим ограничениям, вы, вероятно, должны прочитать информацию о плавающей запятой. Здесь и здесь, вероятно, хорошее начало.

Ответ 2

С Swift 3 вы должны использовать:

CGFloat.greatestFiniteMagnitude
Double.greatestFiniteMagnitude
Float.greatestFiniteMagnitude

Ответ 3

Ответ AV прекрасен, но я считаю, что эти макросы трудно запомнить и немного неочевидны, поэтому в итоге я создал Double.MIN и друзей:

extension Double {
    static var MIN     = -DBL_MAX
    static var MAX_NEG = -DBL_MIN
    static var MIN_POS =  DBL_MIN
    static var MAX     =  DBL_MAX
}

Не используйте нижний регистр min и max - эти символы используются в Swift 3.

Ответ 4

Просто напишите

    let mxFloat = MAXFLOAT

Вы получите максимальное значение float в swif.