[swift-evolution] [Proposal] Random Unification

Saagar Jha saagar at saagarjha.com
Wed Jan 10 16:48:42 CST 2018


Which begs the question: why would you want to do something like this? Creating a “random” Double from its full range of values is an odd thing to do, and the fact that it is non-uniform and has irregularities like infinity and signed zeros makes it likely that any such usage is probably done in error (the one reason I can think of is if you’re trying to test your code with random Doubles, but I’d argue for keeping NaN in that case). Generally users are looking for uniform distributions or ones that follow some set pattern (e.g. normal, Bernoulli), so this doesn’t seem useful at all.

Saagar Jha

> On Jan 10, 2018, at 14:39, Jens Persson <jens at bitcycle.com> wrote:
> 
> On Wed, Jan 10, 2018 at 11:27 PM, Saagar Jha <saagar at saagarjha.com <mailto:saagar at saagarjha.com>> wrote:
> Not a floating point expert, but are you sure this works? I have a feeling this would lead to a distribution that’s not uniform.
> 
> 
> Yes, it would not be uniform, which is exactly what I meant by the last part of: "Assuming you are ok with signed zero and infinities and "strange" bias as result of IEEE 754"
> 
> Also, I think it's impossible to get a uniform distribution of all non-Nan Double values (since they include +- infinity).
> 
> /Jens
> 
>  
> Saagar Jha
> 
>> On Jan 10, 2018, at 14:07, Jens Persson via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>> 
>> On Tue, Jan 9, 2018 at 10:07 PM, Jonathan Hull via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>> 
>> One additional question.  How do you ergonomically get a Double which doesn’t have a range, but also isn’t NaN?
>> 
>> 
>> Assuming you are ok with signed zero and infinities and "strange" bias as result of IEEE 754:
>> 
>> func randomNonNanDouble<R: RandomNumberGenerator>(using generator: R) -> Double {
>>     while true {
>>         let rndUInt64 = generator.next()
>>         let rndDouble = Double(bitPattern: rndUInt64)
>>         if rndDouble != Double.nan { return rndDouble }
>>     }
>> }
>> 
>> /Jens
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20180110/b561b7bc/attachment.html>


More information about the swift-evolution mailing list