Saagar Jha

> On May 22, 2017, at 08:44, Edward Connell via swift-users 
> <swift-users@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.

Modulo bias is easy to deal with, though, if you force random to produce a 
range that is a multiple of the range that you’re trying to produce:

guard range > 0 else { return 0 }
var random: Int
repeat {
        random = Int(random())
} while(random > LONG_MAX / range * range)
return random % range

> 
> 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@swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to