- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我首先定义一个大整数n
:
Prelude> let n = 5705979550618670446308578858542675373983
Prelude> n :: Integer
5705979550618670446308578858542675373983
接下来我查看了 s1
和 s2
的行为:
Prelude> let s1 = (sqrt (fromIntegral n))^2
Prelude> let s2 = (floor(sqrt(fromIntegral n)))^2
Prelude> s1 == fromIntegral n
True
Prelude> s1 == fromIntegral s2
True
Prelude> (fromIntegral n) == (fromIntegral s2)
False
由于任何小数部分都可能被丢弃,因此最后 2 个表达式不相等。然而,我没想到相等是不及物的(例如n == s1, s1 == s2
,但是n != s2
。)
此外,尽管保留了 40 位有效数字,floor
似乎还是失去了整数部分的精度。
Prelude> s1
5.70597955061867e39
Prelude> s2
5705979550618669899723442048678773129216
在测试减法时,这种精度损失变得很明显:
Prelude> (fromIntegral n) - s1
0.0
Prelude> (fromIntegral n) - (fromIntegral s2)
546585136809863902244767
为什么floor
会失去精度,这如何违反了平等的传递性(如果有的话)?
计算floor 的最佳方法是什么。 sqrt
不会损失精度?
最佳答案
损失精度的不是floor
,而是从Integer
(任意精度整数)到Double
( float )的转换。点值,精度有限)。因此,fromIntegral n::Double
不再与 n
相同。
Double
有一个 53 位尾数(52 位显式存储,前导一位隐式存储),大约相当于 16 位十进制数字。因此,结果中只有(大约)16 个最高有效位有效。其余的只是噪音。
最后,前两次比较比较的是 Double
;和n
转换为Double
,s2
转换为Double
code> 和 s1 都是相等的。然而,在第三次比较中,n
和 s2
都是 Integer
;它们可以作为 Integer
进行比较,因此对它们调用 fromIntegral
是无操作,并且它们的未转换整数值是不同的。如果强制转换为 Double
,这些值将再次变得相等:
Prelude> ((fromIntegral n) :: Double) == ((fromIntegral s2) :: Double)
True
关于haskell - 为什么地板会失去精度,它如何影响平等的传递性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18240641/
我一直在努力理解 Javascript 的相等性。你能告诉我为什么以下行返回 false 吗? ? alert((function a(){}) == (function a(){})) // fal
scala 中有一个特别的问题每次都困扰着我。每次它咬我...它咬得很重... 为什么这一行编译通过 val x = "10" if (x != 10) { print("do somethin
我正在努力解决我网站的问题。 我想制作 与具有宽度 960px 的主体相等.我的代码有什么问题或缺失?对不起,我不能直接在这里发布代码,不允许我这样做。这是我的文件的链接: https://githu
我希望这些实例的原型(prototype)相同,但以下相等性检查的计算结果为 false。 var emp1 = new(EmployeeScope())("John"); var emp2 = ne
Hamcrest 中是否有匹配器来比较集合的相等性?有 contains 和 containsInAnyOrder 但我需要 equals 不绑定(bind)到具体的集合类型。例如。我无法将 Arra
struct Something { union { float k; int n; }; bool isFloat; bool ope
是否有 == 的等价物?但结果是x != NA如果 x不是 NA ? 以下是我想要的,但它很笨重: mapply(identical, vec1, vec2) 最佳答案 只需将“==”替换为 %in%
无论如何,我认为这是个问题。我正在使用一个 RelayCommand,它用两个委托(delegate)装饰一个 ICommand。一个是 _canExecute 的 Predicate,另一个是 _e
假设我有一个界面 interface IFoo{ val foo:String } 我想创建等于IFF的foo字符串匹配的类。 简单的例子: class A(override val foo:
谁能解释一下下面这部分代码的含义: private event UserChangedHandler m_UserChanged; public event UserChangedHandler Us
(为冗长的设置道歉。这里有一个问题,我保证。) 考虑一个类 Node具有在构建时分配的不可变唯一 ID。此 ID 用于在持久化对象图时进行序列化等。例如,当一个对象被反序列化时,它会根据 ID 针对主
Ruby API说: The eql? method returns true if obj and other refer to the same hash key. 我更改了 Object 的哈希
在我的 Nant 脚本中,我想将属性值与已知字符串进行比较。看完Nant Expressions文档 我相信我可以做一个基本的“==”比较来评估为 bool 值。 但是鉴于脚本块: 执行时,
简化示例: 我最近设置了 Single Table Inheritance在 Animal 上模型。 Cat和 Dog是 Animal 的子类. 我有一个 Animal工厂 : factory :an
如何使用 NHibernate 通过以下测试? 我认为只需覆盖实体类中的 Equals 和 GetHashCode 就足以使其按照我希望的方式工作。显然,对于非常微不足道的“点”对象,为相同的坐标保留
我是一名优秀的程序员,十分优秀!