如何在Swift中找到Double和Float的最大值

Lor*_*lor 64 floating-point double int infinity swift

当前的学习斯威夫特,有办法找到最大最小的别样的价值整数Int.maxInt.min.

有没有办法找到Double和Float的最大值?此外,我应该针对这类问题提及哪一份文件?我目前正在阅读Apple的The Swift Programming Language.

Vad*_*off 130

从Swift 3开始,你应该使用:

CGFloat.greatestFiniteMagnitude
Double.greatestFiniteMagnitude
Float.greatestFiniteMagnitude
Run Code Online (Sandbox Code Playgroud)

  • 如果您也对Linux上的代码编译感兴趣,这就是答案。 (4认同)

Air*_*ity 70

虽然没有Double.max,但它在C float.h头中定义,您可以在Swift中访问它import Darwin.

import Darwin

let fmax = FLT_MAX
let dmax = DBL_MAX
Run Code Online (Sandbox Code Playgroud)

这些都是大致3.4 * 10^381.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
Run Code Online (Sandbox Code Playgroud)

因此,在进入一些可能会超出这些限制的计算之前,您应该阅读浮点数. 这里这里可能是个好的开始.

  • 在Swift 3中不推荐使用,它现在是`Double.greatestFiniteMagnitude` (15认同)
  • 您需要了解浮点表示.从[维基百科文章](http://en.wikipedia.org/wiki/Floating_point)和[本简介](http://introcs.cs.princeton.edu/java/91float/)开始 (4认同)

Ami*_*ico 11

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
}
Run Code Online (Sandbox Code Playgroud)

不要使用小写的最小值和最大值 - 这些符号在Swift 3中使用.


小智 7

写吧

    let mxFloat = MAXFLOAT
Run Code Online (Sandbox Code Playgroud)

你将在swif中获得float的最大值.