Haskell 如何将浮点小数部分的前32位转换为Word32?

Haskell 如何将浮点小数部分的前32位转换为Word32?,haskell,floating-point,sha256,sha,Haskell,Floating Point,Sha256,Sha,比如说我有一个花车。我想要这个浮点小数部分的前32位?具体来说,我正在研究如何使这部分sha256伪代码正常工作() 我天真地尝试了执行floor((sqrt 2)-1)*2^32),然后将返回的整数转换为Word32。这似乎根本不是正确的答案。我计算出乘以2^32次方,我实际上是向左移动了32个位置(在地板之后)。显然,情况并非如此。不管怎样,长话短说,如何生成h[0..7]?获取h[0..7]的最佳方法是从Wikipedia页面复制十六进制常量。这样你就知道你会得到正确的答案 但如果你真的想

比如说我有一个花车。我想要这个浮点小数部分的前32位?具体来说,我正在研究如何使这部分sha256伪代码正常工作()


我天真地尝试了执行floor((sqrt 2)-1)*2^32),然后将返回的整数转换为Word32。这似乎根本不是正确的答案。我计算出乘以2^32次方,我实际上是向左移动了32个位置(在地板之后)。显然,情况并非如此。不管怎样,长话短说,如何生成h[0..7]?

获取h[0..7]的最佳方法是从Wikipedia页面复制十六进制常量。这样你就知道你会得到正确的答案

但如果你真的想计算它们:

scaledFrac :: Integer -> Integer
scaledFrac x =
    let s = sqrt (fromIntegral x) :: Double
    in  floor ((s - fromInteger (floor s)) * 2^32)

[ printf "%x" (scaledFrac i) | i <- [2,3,5,7,11,13,17,19] ]
scaledFrac::Integer->Integer
标度分形x=
设s=sqrt(来自积分x)::Double
楼层内((s-fromInteger(楼层s))*2^32)

[printf”%x(缩放分形i)|我注意到浮点中没有32位的精度。我想他想要得到表示的第一位。他想要我的代码给他的位。我查看了维基百科条目。哈哈,是的,我不敢相信我自己没有想到复制和粘贴常量。我想我现在有两种生成h[0..7]的方法。谢谢。我正在试图理解计算,但我似乎无法理解为什么分数部分乘以2^32。请解释一下好吗?@STT Computing
s-fromInteger(floor s)
给出了一个间隔(0,1)的数字。要得到一个32位整数,我们乘以2^32。
scaledFrac :: Integer -> Integer
scaledFrac x =
    let s = sqrt (fromIntegral x) :: Double
    in  floor ((s - fromInteger (floor s)) * 2^32)

[ printf "%x" (scaledFrac i) | i <- [2,3,5,7,11,13,17,19] ]