gpt4 book ai didi

haskell - 如何从 float 中提取二进分数

转载 作者:行者123 更新时间:2023-12-04 19:05:54 24 4
gpt4 key购买 nike

现在,浮点数和 double 数,虽然它们可以逼近任何类型的数字(虽然同样可以说是整数,但浮点数更精确),它们在内部表示为二进制小数。例如,十分之一将是近似的

0.00011001100110011... (... only goes to computers precision, not infinity)

现在,任何具有有限位的二进制数称为 dyadic fraction数学中的表示(与 p-adic 无关)。这意味着您将其表示为分数,其中分母是 2 的幂。例如,假设我们的计算机将十分之一近似为 0.00011。它的二进分数是 3/323/(2^5) ,接近十分之一。现在我的技术问题。 从浮点数中提取二元分数的最简单方法是什么。

无关注释:如果您想知道我为什么要这样做,那是因为我正在 Haskell 中创建一个超现实数库。二进分数很容易转换成超现实数,这就是为什么二进制很容易转换成二进数很方便的原因,(不过我肯定会遇到有理数的问题。)

最佳答案

decodeFloat 功能似乎对此很有用。从技术上讲,您还应该检查 floatRadix是 2,但据我所知,在 GHC 中总是如此。

请小心,因为它不会简化尾数和指数。在这里,如果我评估 decodeFloat (1.0 :: Double)我得到 -52 的指数和 2^52 的尾数,这不是我所期望的。

另外, toRational 似乎产生了一个二元分数。不过,我不确定情况是否总是如此。

关于haskell - 如何从 float 中提取二进分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24898506/

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