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 <j...@bitcycle.com> wrote: > > On Wed, Jan 10, 2018 at 11:27 PM, Saagar Jha <saa...@saagarjha.com > <mailto:saa...@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@swift.org <mailto:swift-evolution@swift.org>> wrote: >> >> On Tue, Jan 9, 2018 at 10:07 PM, Jonathan Hull via swift-evolution >> <swift-evolution@swift.org <mailto:swift-evolution@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@swift.org <mailto:swift-evolution@swift.org> >> https://lists.swift.org/mailman/listinfo/swift-evolution >> <https://lists.swift.org/mailman/listinfo/swift-evolution> > >
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution