GVKun编程网logo

mt_rand的缺点是什么?(mt-rand)

11

对于想了解mt_rand的缺点是什么?的读者,本文将是一篇不可错过的文章,我们将详细介绍mt-rand,并且为您提供关于asp.net–静态方法的缺点是什么?、c–使用预处理器定义函数调用的缺点是什么

对于想了解mt_rand的缺点是什么?的读者,本文将是一篇不可错过的文章,我们将详细介绍mt-rand,并且为您提供关于asp.net – 静态方法的缺点是什么?、c – 使用预处理器定义函数调用的缺点是什么?、c – 前瞻性声明的缺点是什么?、c – 嵌套向量的缺点是什么?的有价值信息。

本文目录一览:

mt_rand的缺点是什么?(mt-rand)

mt_rand的缺点是什么?(mt-rand)

偏见的定义是什么:

当max超过2 ^ 32时,mt_rand()返回值的分布在PHP的64位版本上偏向偶数。

如果这是替代四舍五入规则中的那种偏见,我认为这并不重要(因为这种偏见并不明显)。

除了mt_rand()被宣称是比快四倍rand(),只是在前面增加3个字符!

假设mt_rand可用,那么使用它的缺点是什么?

答案1

小编典典

mt_rand使用梅森倍捻机算法,这远远优于LCG通常使用的rand。例如,LCG
的周期仅为 2 32,而mt_rand的周期为2
19937-1。此外,当绘制到多维空间中时,LCG生成的所有值都将位于线或平面上。而且,不仅在实践上可行,而且相对容易地确定LCG的参数。LCG的唯一优势是可能稍快一些,但是在使用php进行编码时,规模是完全不相关的。

但是,mt_rand也不适合用于加密目的 (生成令牌,密码或加密密钥)。

如果需要加密随机性,请random_int在php7中使用。在较早的php版本上,请从符合POSIX的操作系统上阅读/dev/urandom/dev/random在其上阅读。

asp.net – 静态方法的缺点是什么?

asp.net – 静态方法的缺点是什么?

在网站业务层中使用静态方法与实例化一个类然后在类上调用方法的缺点是什么?什么是性能比赛?

解决方法

性能差异可以忽略不计.

使用静态方法的缺点是它变得不太可测试.当依赖关系在静态方法调用中表达时,您无法使用mocks / stub替换这些依赖关系. 200的X- 200 X- 200 X- 200 X- 200 200 200 200 200 -40 200 200 -40 200 200 200 200:200 200 200:200 200 200:部署.

c – 使用预处理器定义函数调用的缺点是什么?

c – 使用预处理器定义函数调用的缺点是什么?

我想知道以这种方式使用预处理器的缺点:
#define SOME_FUNCTION someFunction(someArgument)

基本上我觉得这是错误的(或者当然不是最佳实践) – 但我不确定为什么……我的预处理技能充其量是生锈的.

解决方法

缺点?通常,宏定义不会在可执行文件的符号表中结束.调试稍微困难一些.

c – 前瞻性声明的缺点是什么?

c – 前瞻性声明的缺点是什么?

我想知道在可能的情况下在所有地方使用前向声明是否有任何缺点.这是我的标题只包含声明.

据我所知,使用前向声明可加快编译时间,但我不知道有什么缺点.

例:

啊:

Class A
{
};

b.h:

// Should I use and include "a.h" in the cpp file (e.g.,a.cpp)
Class A;
Class B
{
    doSomething(A *a);
    A *myA;
};

或者它是否更好用

b.h:

#include "a.h"

Class B
{
    doSomething(A *a);
    A *myA;
};

解决方法

使用前向声明可以改善解耦.如果你可以通过使用前向声明来避免包含“A.h”,那么使用前向声明是个好主意.最好不仅因为你的构建运行得更快(毕竟,预处理的头文件可以很好地处理编译器效率),但是因为它告诉读者你的声明,你的B类结构不依赖于你对A类的了解.除了存在之外*.

编辑(回答你的问题)我知道转发声明的唯一缺点是你不能在所有情况下使用它们:例如,类似于这样的声明:

class B
{
    A myA[10];
};

不会编译,因为编译器需要知道A的大小.然而,编译器非常可靠地发现这些问题,并以明确的术语通知您.

* B类的实现很可能取决于知道A类的细节.但是,这种依赖性成为了B类隐藏的实现细节;您可以随时更改它而不会破坏依赖于B类的代码.

c – 嵌套向量的缺点是什么?

c – 嵌套向量的缺点是什么?

我仍然是C的新手,还有很多需要学习的东西,但我最近变得非常依旧的是使用嵌套(多维)向量.所以我通常会得到这样的东西:
std::vector<std::vector<std::string> > table;

然后,我可以轻松访问这样的元素:

std::string data = table[3][5];

然而,最近我得到的印象是(在性能方面)更好地拥有一维向量,然后只使用“索引算术”来相应地访问元素.我认为这种性能影响对于更大或更高维度的向量来说是重要的,但我真的不知道,到目前为止还没有找到关于它的大量信息.

虽然直觉上,单个向量比高维向量具有更好的性能是有道理的,但老实说,我并不理解其实际原因.此外,如果我只是使用单维向量,我将失去用于访问多维元素的直观语法.所以这是我的问题:

为什么多维向量效率低下?如果我只使用一维向量(表示更高维度的数据),那么访问其元素的最佳,最直观的方法是什么?

解决方法

这取决于具体条件.当嵌套版本是真正的2D表格(即,所有行具有相同的长度)时,我将讨论这种情况.

一维矢量通常在每种使用模式上都会更快.或者,至少,它不会比嵌套版本慢.

嵌套版本可以被认为更糟,因为:

>它需要分配行数而不是一行.
>访问元素需要额外的间接,因此它更慢(额外的间接通常比1D情况下所需的乘法更慢)
>如果您按顺序处理数据,那么如果2D数据散布在内存中,则速度会慢得多.这是因为可能存在大量缓存未命中,这取决于内存分配器如何返回不同行的内存区域.

所以,如果你追求性能,我建议你为1D向量创建一个2D包装类.这样,您可以获得与嵌套版本一样简单的API,并且您也将获得最佳性能.甚至,如果由于某种原因,您决定使用嵌套版本,您只需更改此包装类的内部实现.

访问1D元素的最直观方式是y * width x.但是,如果您知道自己的访问模式,则可以选择其他模式.例如,在绘画程序中,基于图块的索引可以更好地存储和操纵图像.在这里,数据可以像这样索引:

int tileMask = (1<<tileSizeL)-1; // tileSizeL is log of tileSize
int tileX = x>>tileSizeL;
int tileY = y>>tileSizeL;
int tileIndex = tileY*numberOfTilesInARow + tileX;
int index = (tileIndex<<(tileSizeL*2)) + ((y&tileMask)<<tileSizeL) + (x&tileMask);

该方法在存储器中具有更好的空间局部性(彼此接近的像素倾向于具有接近的存储器地址).索引计算比简单的y * width x慢,但是这种方法可以减少缓存未命中率,所以最后它可能更快.

关于mt_rand的缺点是什么?mt-rand的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于asp.net – 静态方法的缺点是什么?、c – 使用预处理器定义函数调用的缺点是什么?、c – 前瞻性声明的缺点是什么?、c – 嵌套向量的缺点是什么?的相关知识,请在本站寻找。

本文标签: