[swift-users] arc4random_uniform on Linux is missing from Foundation??
Daniel Dunbar
daniel_dunbar at apple.com
Mon May 22 11:07:19 CDT 2017
This function isn't something which comes with Foundation, it is supplied by the BSD libraries on Darwin, but those aren't present on Linux.
I recommend looking for a Swift implementation of a high-quality RNG which will meet your needs, rather than trying to rely on a non-portable implementation coming from the base OS.
- Daniel
> On May 22, 2017, at 8:44 AM, Edward Connell via swift-users <swift-users at swift.org> wrote:
>
> Any ideas when Foundation on Linux will support arc4random_uniform? This is kind of an important function.
> There doesn't seem to be any decent substitute without requiring the installation of libbsd-dev, which turns out to be messy. Currently I am doing this, but glibc random with mod does not produce good quality numbers, due to modulo bias.
>
> Has anyone come up with a better solution to get a true uniform distribution that isn't super messy?
>
> import Foundation
>
> #if os(Linux)
> import Glibc
> #endif
>
>
> public func random_uniform(range: Int) -> Int {
> guard range > 0 else { return 0 }
> #if os(Linux)
> return Int(random()) % range
> #else
> return Int(arc4random_uniform(UInt32(range)))
> #endif
> }
>
>
> Thanks, Ed
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users
More information about the swift-users
mailing list