Randi(imax,m,n)
10 次查看(过去 30 天)
显示 更早的评论
How to increase the size of the argument imax in randi function. I used the code e=randi(phi,1,1) but there comes an error saying value of phi has to be less than 2^52. What to do to increase this range?
回答(2 个)
James Tursa
2020-6-17
编辑:James Tursa
2020-6-17
The point is that once the eps of the max value is greater than 1, you cannot represent contiguous sets of integer values in double precision. E.g.,
>> eps(2^52)
ans =
1
>> eps(2^53)
ans =
2
So double precision could represent 2^52 + 1 exactly, but you see it will not be able to represent 2^53 + 1 exactly because eps(2^53) is greater than 1. So then the question becomes what makes sense for randi to produce as output when it can't represent all of the integers in the desired range? It doesn't make sense, hence the restriction.
Matt J
2020-6-17
Perhaps as follows,
num = uint64(randi(2^53-1,1))*2^8 +randi(2^8-1,1)
2 个评论
James Tursa
2020-6-18
编辑:James Tursa
2020-6-18
Using uint64 extends the allowed range beyond double, but of course it has a limit as well as you note. If you really need more range then use more than one variable for each value you need and extend Matt's approach.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!