Int32和Int64的性能表现如何?

7

我建议首先尝试使用“Integer”。 - Gabe
我需要一个固定的字长来实现Xorshift,所以整数类型不是一个选择。 - fuz
4
根据你的 RNG 算法,选择更适合的 Int32Int64。创建类型同义词以便稍后轻松测试。还要注意 Int 不等于 Int32(Haskell 规范仅保证 Int 至少为 31 位)。 - John L
请参见https://dev59.com/12025IYBdhLWcg3wtoXX。 - Don Stewart
2个回答

2

在64位系统上,Int64 应该 可以正常使用,但我并不确定。

更重要的是,如果你正在进行加密或随机数生成,你必须使用算法规定的数据类型,并注意符号。如果你不这样做,你将得到错误的结果,这可能意味着你的加密不安全或者你的随机数生成器不是真正的随机(RNG很难,许多看起来随机的RNG实际上并不随机)。

对于其他类型的工作,尽可能使用Integer,或者更好的方法是使用Integral类型类使你的程序具有多态性。然后,如果你认为你的程序比它应该快的慢,请进行分析以确定你应该集中精力加速的地方。如果你使用Integral类型类,从Integer到Int的更改是容易的。Haskell应该足够聪明,可以专门化(大部分)使用多态的代码以避免开销。


1

2
首先,就我的目的而言,我只需要操作一个单独的数字,因此内存访问不应该是问题。真正的问题是,GHC 众所周知会通过 C 调用执行许多不太清楚的操作。 - fuz
这个问题似乎是特定于 Haskell 的。 - Dietrich Epp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接