[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] [分享]测试了一下批处理中Random取值区间

  1. @echo off
  2. SETLOCAL ENABLEDELAYEDEXPANSION
  3. for /l %%c in (0,0,1) do (
  4.   if !random! equ 0 (
  5.     echo ^^!RANDOM^^!==0
  6.     if !max! equ 1 pause&exit
  7.     set min=1
  8.   )
  9.   if !random! equ 32767 (
  10.     echo ^^!RANDOM^^!==32767
  11.     if !min! equ 1 pause&exit
  12.     set max=1
  13.   )
  14. )
复制代码
结果验证了cmd内置环境变量%RANDOM%可取最小值为0,可取最大值为32767
由此可推 环境变量%RANDOM%的取值范是:[0,32767],注意这是闭区间

应该说你证明的是 random 的取值集合中存在 0 和 32767 这两个元素.
如果把你代码中的 0 和 32767 换成 [0,32767] 之内的任意别的数字, 例 0->a, 32767->b (假设 a<=b),
那么 random 的取值范围就被证明是 [a,b], 与你的结论就矛盾了.

TOP

谢谢提醒 我主要目的是测试这个区间是开还是闭

TOP

本帖最后由 hanyeguxing 于 2011-5-9 09:09 编辑

如果验证,可以直接:
  1. @echo off
  2. :a
  3. if %random%==0 set a=1
  4. if %random%==32767 set b=1
  5. if "%a%%b%"=="11" (echo;完成&pause) else goto:a
复制代码
rand()生成 0 ~ RAND_MAX 之间的一个伪随机数,与种子 srand() 、时间 time() 通过线性同余算法获取变量 %random% 的范围为 0 ~ 32767

cmd.exe:
msvcrt.rand, Ord:02EDh
:4AD12E3B FF156412D04A      Call dword ptr [4AD01264]
:4AD12E41 50           push eax
:4AD12E42 E9207AFFFF       jmp 4AD0A867

msvcrt.time, Ord:0317h
:4AD04BEE FF153C12D04A      Call dword ptr [4AD0123C]
:4AD04BF4 50           push eax

msvcrt.srand, Ord:02FBh
:4AD04BF5 FF154012D04A      Call dword ptr [4AD01240]
:4AD04BFB 59           pop ecx
:4AD04BFC 59           pop ecx
:4AD04BFD 5F           pop edi
:4AD04BFE 5E           pop esi
:4AD04BFF 5B           pop ebx
:4AD04C00 C9           leave
:4AD04C01 C20400         ret 0004
:4AD04C04 41           inc ecx
:4AD04C05 007500         add byte ptr [ebp+00], dh
:4AD04C08 7400          je 4AD04C0A
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

微软的文档里面不是明确说的了吗
%RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

可取最大值为32767
由此可推 环境变量%RANDOM%的取值范是:[0,32767],

验证方式相当……  不讨论。

TOP

返回列表