设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 117|回复: 0
收起左侧

易语言实现取指定最小值到最大值范围的随机32位单精度小数值 支持取负数 (返回小数型)

[复制链接]
发表于 2023-12-9 10:50:26 | 显示全部楼层 |阅读模式
1.png
  1. .版本 2
  2. .支持库 spec

  3. .程序集 程序集1

  4. .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码

  5. 置随机数种子 ()

  6. _临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
  7. 返回 (0)  ' 可以根据您的需要返回任意数值

  8. .子程序 _临时子程序
  9. .局部变量 随机小数, 小数型

  10. .计次循环首 (100, )
  11.     随机小数 = 取随机小数 (0, 1)  ' 大于0小于1的小数
  12.     调试输出 (随机小数)
  13. .计次循环尾 ()

  14. .子程序 取随机小数, 小数型, 公开, 取一个范围:最小值~最大值的小数,成功返回小数,失败返回NAN
  15. .参数 最小值, 小数型, , 欲取随机数的最小值 (支持负数)
  16. .参数 最大值, 小数型, , 欲取随机数的最大值 (最小值大于最大值则交换)
  17. .局部变量 小数, 小数型
  18. .局部变量 最小值_整, 整数型
  19. .局部变量 最小值_指数位, 字节型, , , 范围:0~255
  20. .局部变量 最小值_尾数位, 整数型, , , 0~8388607
  21. .局部变量 最大值_整, 整数型
  22. .局部变量 最大值_指数位, 字节型
  23. .局部变量 最大值_尾数位, 整数型
  24. .局部变量 随机指数, 字节型
  25. .局部变量 随机尾数, 整数型
  26. .局部变量 偏移, 小数型
  27. .局部变量 倍数, 小数型, , , 大于1的值
  28. .局部变量 间距, 字节型
  29. .局部变量 连续, 字节型

  30. .判断开始 (最小值 = 最大值)
  31.     返回 (最大值)
  32. .判断 (最小值 > 最大值)
  33.     交换变量 (最小值, 最大值)
  34. .默认

  35. .判断结束
  36. .循环判断首 ()
  37.     倍数 = 取随机数 (1, ) ÷ 取随机数 (1, )
  38. .循环判断尾 (倍数 ≤ 1)
  39. .如果 (最小值 < 0)
  40.     偏移 = 最小值
  41. .否则
  42.     偏移 = 0
  43. .如果结束
  44. 最小值 = (最小值 - 偏移) ÷ 倍数
  45. 最大值 = (最大值 - 偏移) ÷ 倍数
  46. 最小值_整 = 小数_联合到整数 (最小值)
  47. 最大值_整 = 小数_联合到整数 (最大值)
  48. .如果真 (是否运算正确 (最小值) = 假 或 是否运算正确 (最大值) = 假)
  49.     返回 (整数_联合到小数 (2147483647))
  50. .如果真结束
  51. 最小值_指数位 = 右移 (最小值_整, 23)
  52. 最大值_指数位 = 右移 (最大值_整, 23)
  53. 最小值_尾数位 = 位与 (最小值_整, 8388607)
  54. 最大值_尾数位 = 位与 (最大值_整, 8388607)
  55. .循环判断首 ()
  56.     随机尾数 = 位与 (位异或 (左移 (取随机数 (, ), 7), 取随机数 (, )), 8388607)
  57.     间距 = 最大值_指数位 - 最小值_指数位
  58.     .如果 (间距 ≠ 0)
  59.         .计次循环首 (间距, )
  60.             .如果 (取随机数 (0, 255) ≥ 128)
  61.                 连续 = 连续 + 1
  62.             .否则
  63.                 跳出循环 ()
  64.             .如果结束

  65.         .计次循环尾 ()
  66.         随机指数 = 最小值_指数位 + 间距 - 连续
  67.         .判断开始 (随机指数 = 最小值_指数位)
  68.             随机尾数 = 限制整数范围 (随机尾数, 最小值_尾数位, 8388607)
  69.         .判断 (随机指数 = 最大值_指数位)
  70.             随机尾数 = 限制整数范围 (随机尾数, 0, 最大值_尾数位)
  71.         .默认

  72.         .判断结束

  73.     .否则
  74.         随机指数 = 最小值_指数位
  75.         随机尾数 = 限制整数范围 (随机尾数, 最小值_尾数位, 最大值_尾数位)
  76.     .如果结束
  77.     小数 = 整数_联合到小数 (位或 (左移 (随机指数, 23), 随机尾数))
  78. .循环判断尾 (小数 < 最小值 或 小数 > 最大值)
  79. 返回 (小数 × 倍数 + 偏移)

  80. .子程序 整数_联合到小数, 小数型
  81. .参数 整数, 整数型

  82. 置入代码 ({ 139, 69, 8, 201, 194, 4, 0 })
  83. ' mov eax,[ebp+8]
  84. ' leave
  85. ' retn 4
  86. 返回 (0)

  87. .子程序 小数_联合到整数, 整数型
  88. .参数 小数, 小数型

  89. 置入代码 ({ 139, 69, 8, 201, 194, 4, 0 })
  90. ' mov eax,[ebp+8]
  91. ' leave
  92. ' retn 4
  93. 返回 (0)

  94. .子程序 限制整数范围, 整数型
  95. .参数 数值, 整数型
  96. .参数 最大值, 整数型
  97. .参数 最小值, 整数型

  98. .如果真 (最大值 < 最小值)
  99.     交换变量 (最大值, 最小值)
  100. .如果真结束
  101. 返回 (数值 % (最大值 - 最小值 + 1) + 最小值)
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-27 20:57 , Processed in 1.148066 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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