ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1834|回复: 35

[原创] 发现RANDBETWEEND的两个BUG

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-3-18 12:45 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 李逸雪 于 2024-3-18 13:28 编辑

今天看到一个没头没尾的随机数问题,于是便想随便打个=RANDBETWEEN(-9E+307,9E+307)去忽悠一下,打完点发送前转念一想,RANDBETWEEN参数的范围是多少,我这么写万一参数超出范围出错了怎么办?毕竟我对函数也不是很熟,还是先测试一下吧,于是……
一开始看起来貌似没什么问题,至少没出错……
1.png
F9按了几下,又拉了一下之后,感觉有点不对劲,这还是随机吗?完全没变!(这算是第一个BUG)
2.png
于是我想,难道是参数范围太大了?于是改小了参数,改成9^9,结果直接出错
3.png
而正常情况下9^9是可以使用的,下图为证
4.png
然而接下来,还有更令人大跌眼镜的情况,我在其他单元格里直接输了个=9^9,结果……
5.png
到这里,情况似乎清晰明了了吧,按照一定的步骤操作,就会出现NUM错误,然而事情并没有这么简单……
6.png
没错,同样的操作流程,其他单元格并不一定每次都会出错,它是个玄学!
那么接下来就涉及到概率论和数理统计的问题了……
经过多次测试,发现=RANDBETWEEN(-9^9,9^9)是否出错,与其他单元格有没有存在=RANDBETWEEN(-9E+307,9E+307)没有必然关系,就算清空了其他单元格,或者一开始就只用一个单元格改公式,还是有可能会出NUM错误。但是在概率上似乎有点关系,如果其他单元格填充了=RANDBETWEEN(-9E+307,9E+307),那么出现NUM错误的概率将更高,并且填充的单元格数量越多,概率越大……
另外,在其他单元格里输入=9^9的时候,原来的NUM错误有概率恢复正常,并且概率似乎也与=RANDBETWEEN(-9E+307,9E+307)填充的单元格数量有关。此外,=9^9是否会出现NUM错误也是个玄学……
7.png 8.png 9.png
以上问题在WIN7+2016版365OFFICE上测试为主,另外在手机版和WIN10+2021版上也做了少量测试,均存在同样的问题(由于一开始不知道是个玄学,手机上测试的时候还以为有点不一样……)

评分

8

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-18 13:43 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-18 13:47 | 显示全部楼层
本帖最后由 李逸雪 于 2024-3-18 14:22 编辑

最后,回到一开始的问题,RANDBETWEEN的参数范围到底是多少?
经简单测试,大约是在=RANDBETWEEN(-9E+306,9E+306)
没错,306可以,307不行
经海鲜大神测试,稍微再扩大些范围,即=RANDBETWEEN(-8E+307,8E+307)

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-18 13:49 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-3-18 14:10 | 显示全部楼层
本帖最后由 象山海鲜 于 2024-3-18 14:20 编辑

1.  =RANDBETWEEN(-9E+307,9E+307) 改为 =RANDBETWEEN(-8E+307,8E+307) 就会有正负,且位数为306或307
2.  如果其他单元格 没有 =RANDBETWEEN(-9E+307,9E+307) 那么 =RANDBETWEEN(-9^9,9^9) 没出现错误
     如果有 =RANDBETWEEN(-9E+307,9E+307) 那么 =RANDBETWEEN(-9^9,9^9)  乃至 =RANDBETWEEN(-9^3,9^3) 都会出错,
            但用常量没出现错误 例 =RANDBETWEEN(-729,729)。好像有 与 次幂  ^和 =RANDBETWEEN(-9E+307,9E+307) 公式两者有关。


Microsoft® Excel® 适用于 Microsoft 365MSO (版本 2402 Build 16.0.17328.20124) 64 位


评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-18 14:20 | 显示全部楼层
本帖最后由 李逸雪 于 2024-3-18 14:30 编辑
象山海鲜 发表于 2024-3-18 14:10
1.  =RANDBETWEEN(-9E+307,9E+307) 改为 =RANDBETWEEN(-8E+307,8E+307) 就会有正负,且位数为306或307
2.  ...

1、9E+307应该是超范围了,改小点就不会出错,比如9E+306或者你说的8E+307;至于位数为306或307的问题,应该是概率问题,数字每增加一位,量就增加了10倍,两位就是100倍,所以用8E+307很难随机到306以下的位数了
2、如果其他单元格没有=RANDBETWEEN(-9E+307,9E+307),那么=RANDBETWEEN(-9^9,9^9)还是有可能会出错的,但是要先输入=RANDBETWEEN(-9E+307,9E+307),然后再改成=RANDBETWEEN(-9^9,9^9),这种情况下有概率会出错。
用常量和乘法都没出错,估计与幂运算有关

TA的精华主题

TA的得分主题

发表于 2024-3-18 14:28 | 显示全部楼层
李逸雪 发表于 2024-3-18 13:49
307才会出错,306及以下正常

      嗯   是的

TA的精华主题

TA的得分主题

发表于 2024-3-18 14:49 | 显示全部楼层
不论什么情况,=9^9随了几十万次貌似都没报错。。
Microsoft® Excel® 适用于 Microsoft 365MSO (版本 2403 Build 16.0.17425.20000) 64 位

TA的精华主题

TA的得分主题

发表于 2024-3-18 15:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
都是有研究精神的人,值得学习!

TA的精华主题

TA的得分主题

发表于 2024-3-18 17:25 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 06:38 , Processed in 0.047429 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表