CnPack Forum » 技术板块灌水区 » MicroTip#1:随机生成某一范围的浮点数


2007-2-9 10:39 skyjacker
MicroTip#1:随机生成某一范围的浮点数

// MicroTip#1:随机生成某一范围的浮点数
// Wrtten by SkyJacker
function RandomFloat(L, H: Single): Single;
begin
  repeat
    Result := Random * H;
  until (Result > L);
end;

2007-2-9 10:45 kendling
这样应该会单、快捷一点吧?

function RandomFloat(L, H: Single): Single;
begin
  Result := Single((H - L + 1) * Random + L)
end;

2007-2-9 11:08 Passion
也是。
第一个不能保证时间性。
第二个方便点,但边界条件不知道如何。

2007-2-9 11:58 skyjacker
// 随机生成某一范围的浮点数
function RandomFloat(L, H: Single): Single;
begin
  repeat
    Result := Random * H;
  until (Result > L);
end;

function RandomFloatA(L, H: Single): Single;
begin
  Result := ((H - L + 1) * Random + L);
end;

procedure TForm1.btnFuncRandomClick(Sender: TObject);
begin
    Log(Format(cnFloat4, [RandomFloat(0,1)]));
    Log(Format(cnFloat4, [RandomFloatA(0,1)]));
end;

RandomFloatA 有边界问题
0.2729
1.3433

2007-2-9 12:00 skyjacker
// 随机生成某一范围的浮点数
RandomFloat也需要做边界检查
function RandomFloat(L, H: Single): Single;
begin
  if L > =H then
  begin
    Result := H;
    exit;
  end;
  repeat
    Result := Random * H;
  until (Result > L);
end;

[[i] 本帖最后由 skyjacker 于 2007-2-9 15:00 编辑 [/i]]

2007-2-9 15:07 kendling
:o 我那个是从VB里转过来的,可能对整数没这个问题。

页: [1]


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.