gpt4 book ai didi

javascript - crypto.getRandomValues(new Uint32Array(1))[0]/lim 可以为负数吗?

转载 作者:行者123 更新时间:2023-12-02 21:28:41 24 4
gpt4 key购买 nike

好奇表达式 crypto.getRandomValues(new Uint32Array(1))[0]/lim 是否可以为负数。

我正在转换的代码在其周围放置了一个 Math.abs 包装器,但我们中的一些人认为它不可能为负数,所以只是想看看你们其他人的想法?

var lim = Math.pow(2, 32) - 1;
crypto.getRandomValues(new Uint32Array(1))[0] / lim);

这是更多上下文的相关问题: Converting getRandomValue.browser from cuid to Typescript?

该库有一个 getRandomValue() Nodejs 函数,如下所示:

import * as crypto from "crypto"

var lim = Math.pow(2, 32) - 1;

export function getRandomValue () {
return Math.abs(crypto.randomBytes(4)
.readInt32BE(0) / lim)
}

我认为对于浏览器来说,Math.abs 调用被保留,尽管看起来没有必要,而且很可能是不正确的。

最佳答案

在这种情况下,使用 Math.abs()错误!

正如上面的声明所述,所讨论的值是 UInt32 ...无符号 32 位整数。

这仅仅意味着最左边的位(最高有效位)被解释为符号位。但是,这并不能阻止您在某些情况下无意中使用该值,会假设 MSB=1 表示“负数”。

尽管如此,使用 abs()错误,因为如果发现 MSB=1,这会转换整个位模式,变成一个完全不同的位模式。由于 MSB 只是“组成该值的 32 位之一”,因此假设它是符号位,对其进行任何操作都是完全错误的。而且您还需要注意它永远不会显示为负数,因为它不是。这个数量是 32 位长,而不是 31+符号。确保它看起来总是这样。

关于javascript - crypto.getRandomValues(new Uint32Array(1))[0]/lim 可以为负数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60675465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com