将随机字节缩放到选定的整数范围

2024-03-12

我有一个真正的随机字节文件。我想要一个返回随机整数的函数在给定的范围内通过从文件中获取一个字节并对其进行缩放。 (这是正确的词吗?)

public int getInt(int l, int h) throws IOException {
    int m = (h - l) + 1;            // number of ranges needed
    int r = 256 / m;                // size of byte range
    int x = (r * m) - 1;            // maximum allowable byte value
    int b;
    do {
        try {                       // get random byte from file
            b = ram.readUnsignedByte();
        } catch (EOFException e) {  // catch EOF, reset pointer
            b = 255; ram.seek(0);   // and set b to maximum value
        }                           // so test will fail.
    } while(b > x);                 // if byte is greater than
                                    // allowable value, loop.
    return (b / r) + l;             // return random integer
}                                   // within requested range

这是我的功能。我担心通过缩放文件会破坏文件中字节的真正随机性。我读到我需要丢弃任何高于允许最大值的数字(因此对于数字 0-9,最大值为 249,因为我只剩下 7 个值可以分配给 10 个不同的组)。我的实现看起来正确吗?

另外,我想知道,仅仅通过使某些太大的字节无效,我是否会以任何方式扭曲分布?


是的,为了避免偏差,你不能使用模,你必须扔掉不在范围内的结果。

编程成功的关键是将您的任务分解为合适的子任务。快速规格:

  1. 添加一个函数来计算存储给定数字需要多少位
  2. 添加一个类,它从随机性文件中读取和缓冲字节,并有方法为您提供一个整数,其中包含从文件中获取的一些位数(其余位为 0)。
  3. add the actual method to get your random number:
    • 计算结果的范围,并从中计算所需的位数
    • 循环获取位,添加下限,如果结果大于上限则重试

请注意第 2 步:第一个实现可能非常粗糙,例如,您只能获取 4 个字节作为整数并丢弃额外的位。稍后您可以优化此类以保留未使用的位并在下次使用它们,以避免浪费随机位。由于获得真正好的随机位通常有点昂贵,因此这种优化可能值得认真使用。

对于位操作,请参见以下问题:Java“位移位”教程? https://stackoverflow.com/questions/6250114/java-bit-shifting-tutorial

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将随机字节缩放到选定的整数范围 的相关文章

随机推荐

  • Microsoft Media Foundation 中的 h264 无损模式

    我发现h264编解码器可以工作在无损压缩模式下 但微软媒体基金会支持吗 如果是这样 我如何将该编解码器的压缩模式从有损压缩模式切换到无损压缩模式 Windows 附带的 H 264 编码器的软件实现仅限于 H 264 配置文件 并且不提供无
  • GraphQL - 在查询多个突变期间如何检索先前突变的 id

    我想在同一个查询中运行多个突变 在下面的示例中 我创建了一个订单 并在创建了关于之前创建的产品记录之后 我一定有两个突变 首先 我插入订单 在输出中 我检索了 idorder 然后 我插入一个产品 这个产品 mutation createO
  • 开发RESTful应用程序时如何使用Yii2调试器?

    就像在指南中一样 我创建了 RESTful 控制器 UserController namespace app controllers use yii rest ActiveController class UserController ex
  • C# - 文件路径的正则表达式C:\测试\测试.exe

    我目前正在寻找一个可以帮助验证文件路径的正则表达式 例如 C test test2 test exe 我决定发布这个确实使用正则表达式的答案 a zA Z w w w w w 适用于这些 test test TEST xls server
  • Loopj 的 AsyncHttpclient 未设置正确的超时

    我尝试在我的单例类中设置 asynchttpclient 的超时 但似乎它没有改变 我得到了 10000 我认为这是默认值 client setMaxRetriesAndTimeout 0 5000 Log i loopj client g
  • Arch Linux 中没有 OpenGL 3 标头

    我正在尝试使用 FreeGLUT 编译一个非常简单的 Hello world OpenGL 3 3 程序 在我找到的所有教程中 它们都包含标题 gl3 h 问题是我没有这样的头文件 ls l usr include GL total 216
  • 错误:WSDL - SOAP-错误:正在解析 WSDL:无法从 [重复] 加载

    这个问题在这里已经有答案了 我有一个使用soap的php代码 我收到错误 错误 WSDL SOAP 错误 正在解析 WSDL 无法从以下位置加载 这是一个安全 wsdl 所以我还需要发送用户名和密码 我的代码有什么问题吗 我在网上看到它 但
  • Python ctypes 使用 winmode 加载 DLL

    我安装了一个 C API 应用程序 其中包含几个 DLL A DLL and B DLL 在我的程序文件夹中 A DLL依赖于B DLL 我可以成功加载它们ctypes WinDLLIF 从安装文件夹中 例如C Programs Files
  • 如何用 Go 编写一个简单的自定义 HTTP 服务器?

    我是 Go 新手 正在尝试编写一个自定义 HTTP 服务器 我收到编译错误 我该如何实施ServeHTTP我的代码中的方法 My Code package main import net http fmt io time func myHa
  • 注册后台任务而不运行应用程序

    tl dr 如何在不运行应用程序的情况下注册后台任务 长版 我想注册一个后台任务 以便在用户每次登录时运行SystemTriggerType UserPresent 我找到了有关注册任务的信息 但这是必须执行的代码 如果只需要执行任务就可以
  • 在 Keras 中将循环层与致密层合并

    我想建立一个神经网络 其中前两个层是前馈的 最后一层是循环的 这是我的代码 model Sequential model add Dense 150 input dim 23 init normal activation relu mode
  • 如何在视图控制器中以编程方式切换视图? (Xcode、iPhone)

    已经为此苦苦挣扎了一段时间 似乎永远无法得到直接答案 任何帮助表示赞赏 如果您在导航控制器中 ViewController viewController ViewController alloc init self navigationCo
  • 批处理脚本,进入睡眠状态直到特定时间

    我的程序出现问题 每 6 小时发生一到两次 所以我想知道是否有什么方法可以让批处理脚本在后台不断运行 并且只在早上 6 点 中午 下午 6 点和午夜执行它给出的命令 我的脚本只是一个命令 C Program Files WinSCP Win
  • 如何在T-SQL中将DateTime转换为精度大于天的数字?

    下面的两个查询都转换为相同的数字 SELECT CONVERT bigint CONVERT datetime 2009 06 15 15 00 00 SELECT CAST CONVERT datetime 2009 06 15 23 0
  • 使用 System.setOut() 重定向 Runtime.getRuntime().exec() 输出;

    我有一个程序 Test java import java io public class Test public static void main String args throws Exception System setOut new
  • 如何将图像保存到相机胶卷?

    我是 Xcode 新手 使用 4 3 不确定如何将图像保存到设备的相机胶卷中 到目前为止我所做的就是为按钮设置一个 IBAction 来保存图像 我可以使用什么库方法或函数将图像保存到用户的相机胶卷中 您使用UIImageWriteToSa
  • org.springframework.mail 的哪个工件?

    我想使用 spring 支持来发送邮件 我的项目是用 maven 2 构建的 我使用 spring core 2 5 5 我尝试在 maven 中央存储库中查找要包含在我的 pom xml 中的工件 我发现的唯一一个是弹簧支撑 http m
  • Git:从失败的变基中恢复

    我只是试图重新调整我的一个功能分支 但出现了问题 现在我正在尝试找出如何撤消此操作 在我的功能分支上 我简单地做了一个 git rebase develop提交错误修复后develop我也在功能分支中想要它 这给了我 git rebase
  • PIL 的 ImageGrab 以错误的分辨率进行捕获

    我正在尝试使用此代码进行全屏 1920 x 1080 捕获 但保存的图像只有 1536 x 864 解决方案 正如马克在下面指出的那样 Windows 具有缩放功能 可以通过 控制面板 gt 显示 进行更改 将其一直调低 from PIL
  • 将随机字节缩放到选定的整数范围

    我有一个真正的随机字节文件 我想要一个返回随机整数的函数在给定的范围内通过从文件中获取一个字节并对其进行缩放 这是正确的词吗 public int getInt int l int h throws IOException int m h