- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试生成斐波那契数列以与素数列表进行比较(例如)。两个列表都从第一个已知的 fibo/prime 数字开始,到第 10000 个结束。问题是:图形比较(图表)只有在某些函数(如“logBase 2”)应用于斐波纳奇数时才有可能,但“logBase”仅适用于(?)“ float ”数字。不幸的是,fibo 数字变得很大,所以我认为 fibo 数字应该是“整数”(无界)。
这会导致转换问题。
示例( double 与整数与有理数):
Prelude> (fromInteger 99^155 :: Double)
Infinity
Prelude> 99^155
2105984461967288122980631709715261275645844225982779394351624787177327329412781425212770617487844004735075332631944629831514476725173837569097618069672639524362255333585985536520710945968603104880488606713054412670128838036813075895861981025491395960367363513228812061706617371582639821584522415306665565665499
Prelude> logBase 2 $ fromRational (fromInteger 99^155 :: Rational)
Infinity
因此,问题:我怎样才能使用像“logBase”这样的数学函数来处理无界整数?一些提示?
最佳答案
如何使用 log 的数学属性 - 类似于
{-# LANGUAGE ScopedTypeVariables #-}
logBaseRational :: forall a . (RealFloat a, Floating a) => Rational -> Rational -> a
logBaseRational k n | isInfinite (fromRational n :: a) = logBaseRational k (n/k) + 1
logBaseRational k n | isDenormalized (fromRational n :: a) = logBaseRational k (n*k) - 1
logBaseRational k n = logBase (fromRational k) (fromRational n)
如果您需要处理非常大的数字,可以做一些更有效的事情,但这应该适用于您感兴趣的范围。
使用 ScopedTypeVariables
只是为了确保 isInfinite
和 isDenormalized
测试以正确的类型完成。
此外,isDenormalized
不是对范围底端的完整测试 - 您想要的是同时检查(由于精度损失问题)以及转换后的值是否为0
当未转换的值不是时 - 但由于这个问题是关于大数字的,所以它并不重要,我只是把它扔进去让我的回答更笼统。
关于Haskell:如何使用像 "logBase"这样的数学函数来处理无界整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6530467/
我有一个Foldable的Integer s 是无界的,因此我无法应用 Max折叠到它。 定义 Max 有意义吗? Nothing 的实例当一个值不存在时?有Ord a => Semigroup (M
我有两个简单的问题。我有一个 LinkedBlockingQueue,我将其简单地创建为 新的 LinkedBlockingQueue() 所以我认为这保证是无限的,对吗? 如果确实如此,那么说在此队
是否可以在未指定边界之一的情况下使用 git bisect。例如,如果我发现 HEAD 上有问题但我怀疑它在过去在某个时候有效,有没有办法告诉 git “尝试一次提交之前,如果那不起作用尝试两次提交之
我是一名优秀的程序员,十分优秀!