2015-02-15 1 views
40

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

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

ответ

52

Пока нет 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 

Поэтому, прежде чем попасть в некоторые расчеты, которые могли бы, возможно, подучиться против этих ограничений, вероятно, вы должны прочитать вверх по плавающей точке. Here и here, вероятно, хорошее начало. Ответ

+0

Я попробую вас на игровой площадке Xcode и получите '(+ бесконечность)' для Double и 340,282,346,638,529,000,000,000,000,000,000,000,000,000.0 для Float. Почему Double и Int64 имеют 64-битные, но double могут хранить больше номеров? –

+3

Вам нужно узнать о представлении с плавающей запятой. Начните с статьи [wikipedia article] (http://en.wikipedia.org/wiki/Floating_point), а также [это введение] (http://introcs.cs.princeton.edu/java/91float/) –

+0

Спасибо, много. Я прочитаю их все. –

8

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 
} 

Не используйте строчную мин и макс - эти символы используются в Swift 3.

71

Как Свифта 3, вы должны использовать:

CGFloat.greatestFiniteMagnitude 
Double.greatestFiniteMagnitude 
Float.greatestFiniteMagnitude 
+0

Это ответ, если вас тоже интересует компиляция кода на Linux. –

2

Просто Написать

let mxFloat = MAXFLOAT 

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

+0

Это не скомпилируется на linux –

Смежные вопросы