Random 朱莉娅:兰德真的有可能投零分吗?
sayRandom 朱莉娅:兰德真的有可能投零分吗?,random,julia,Random,Julia,sayrand在半开放单位间隔[0,1]中绘制iid均匀分布值,该间隔包括零,但rand是否曾经抛出零?是的,rand() 无论是否为零(rand()),软件都应设计为工作,并且 提供适当测试用例的良好实践。连续生成rand()的计算机多久产生一次零?使用非常粗略的估计:大约每六周一次 有时从(0.0,1.0)中取样可能更合适,忽略零 在允许的情况下。这里有一种方法 zero_as_one(x::T) where {T<:AbstractFloat} = ifelse(iszero
rand
在半开放单位间隔[0,1]中绘制iid均匀分布值,该间隔包括零,但rand是否曾经抛出零?是的,rand()
无论是否为零(rand())
,软件都应设计为工作,并且
提供适当测试用例的良好实践。连续生成rand()
的计算机多久产生一次零?使用非常粗略的估计:大约每六周一次
有时从(0.0,1.0)中取样可能更合适,忽略零
在允许的情况下。这里有一种方法
zero_as_one(x::T) where {T<:AbstractFloat} =
ifelse(iszero(x), one(T), x)
rand1(::Type{T}) where {T<:AbstractFloat} =
zero_as_one(rand(T))
function rand1(::Type{T}, n::I) where {T<:AbstractFloat, I<:Integer}
n < 1 && throw(ArgumentError("n must be >= 1"))
n === one(I) && return rand1(T)
return map(zero_as_one, rand(T, n))
end
zero\u as\u one(x::T)其中{T
openrand() = openrand(Float64)
openrand(::Type{T}) where {T<:AbstractFloat} =
let result = rand(T)
while iszero(result)
result = openrand(T)
end
result
end
function openrand(::Type{T}, n::I) where {T<:AbstractFloat, I<:Integer}
n < 1 && throw(ArgumentError("n must be >= 1"))
n === one(I) && return openrand(T)
result = Vector{T}(undef, n)
for i in 1:n
result[i] = openrand(T)
end
return result
end