易语言实现取指定最小值到最大值范围的随机32位单精度小数值 支持取负数 (返回小数型)
.版本 2
.支持库 spec
.程序集 程序集1
.子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码
置随机数种子 ()
_临时子程序 ()' 在初始化代码执行完毕后调用测试代码
返回 (0)' 可以根据您的需要返回任意数值
.子程序 _临时子程序
.局部变量 随机小数, 小数型
.计次循环首 (100, )
随机小数 = 取随机小数 (0, 1)' 大于0小于1的小数
调试输出 (随机小数)
.计次循环尾 ()
.子程序 取随机小数, 小数型, 公开, 取一个范围:最小值~最大值的小数,成功返回小数,失败返回NAN
.参数 最小值, 小数型, , 欲取随机数的最小值 (支持负数)
.参数 最大值, 小数型, , 欲取随机数的最大值 (最小值大于最大值则交换)
.局部变量 小数, 小数型
.局部变量 最小值_整, 整数型
.局部变量 最小值_指数位, 字节型, , , 范围:0~255
.局部变量 最小值_尾数位, 整数型, , , 0~8388607
.局部变量 最大值_整, 整数型
.局部变量 最大值_指数位, 字节型
.局部变量 最大值_尾数位, 整数型
.局部变量 随机指数, 字节型
.局部变量 随机尾数, 整数型
.局部变量 偏移, 小数型
.局部变量 倍数, 小数型, , , 大于1的值
.局部变量 间距, 字节型
.局部变量 连续, 字节型
.判断开始 (最小值 = 最大值)
返回 (最大值)
.判断 (最小值 > 最大值)
交换变量 (最小值, 最大值)
.默认
.判断结束
.循环判断首 ()
倍数 = 取随机数 (1, ) ÷ 取随机数 (1, )
.循环判断尾 (倍数 ≤ 1)
.如果 (最小值 < 0)
偏移 = 最小值
.否则
偏移 = 0
.如果结束
最小值 = (最小值 - 偏移) ÷ 倍数
最大值 = (最大值 - 偏移) ÷ 倍数
最小值_整 = 小数_联合到整数 (最小值)
最大值_整 = 小数_联合到整数 (最大值)
.如果真 (是否运算正确 (最小值) = 假 或 是否运算正确 (最大值) = 假)
返回 (整数_联合到小数 (2147483647))
.如果真结束
最小值_指数位 = 右移 (最小值_整, 23)
最大值_指数位 = 右移 (最大值_整, 23)
最小值_尾数位 = 位与 (最小值_整, 8388607)
最大值_尾数位 = 位与 (最大值_整, 8388607)
.循环判断首 ()
随机尾数 = 位与 (位异或 (左移 (取随机数 (, ), 7), 取随机数 (, )), 8388607)
间距 = 最大值_指数位 - 最小值_指数位
.如果 (间距 ≠ 0)
.计次循环首 (间距, )
.如果 (取随机数 (0, 255) ≥ 128)
连续 = 连续 + 1
.否则
跳出循环 ()
.如果结束
.计次循环尾 ()
随机指数 = 最小值_指数位 + 间距 - 连续
.判断开始 (随机指数 = 最小值_指数位)
随机尾数 = 限制整数范围 (随机尾数, 最小值_尾数位, 8388607)
.判断 (随机指数 = 最大值_指数位)
随机尾数 = 限制整数范围 (随机尾数, 0, 最大值_尾数位)
.默认
.判断结束
.否则
随机指数 = 最小值_指数位
随机尾数 = 限制整数范围 (随机尾数, 最小值_尾数位, 最大值_尾数位)
.如果结束
小数 = 整数_联合到小数 (位或 (左移 (随机指数, 23), 随机尾数))
.循环判断尾 (小数 < 最小值 或 小数 > 最大值)
返回 (小数 × 倍数 + 偏移)
.子程序 整数_联合到小数, 小数型
.参数 整数, 整数型
置入代码 ({ 139, 69, 8, 201, 194, 4, 0 })
' mov eax,
' leave
' retn 4
返回 (0)
.子程序 小数_联合到整数, 整数型
.参数 小数, 小数型
置入代码 ({ 139, 69, 8, 201, 194, 4, 0 })
' mov eax,
' leave
' retn 4
返回 (0)
.子程序 限制整数范围, 整数型
.参数 数值, 整数型
.参数 最大值, 整数型
.参数 最小值, 整数型
.如果真 (最大值 < 最小值)
交换变量 (最大值, 最小值)
.如果真结束
返回 (数值 % (最大值 - 最小值 + 1) + 最小值)
页:
[1]