- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现以下简单(一阶)有限差分函数:
finite_difference :: Fractional a => a -> (a -> a) -> a -> a
finite_difference h f x = ((f $ x + h) - (f x)) / h
您可能知道,有一个微妙的问题:必须确保 (x + h)
和 x
相差一个可精确表示的数字。否则,由于 (f $ x + h) - (f x)
涉及灾难性取消这一事实,结果会产生巨大的错误(并且必须仔细选择 h
,但这不是我的问题)。
在 C 或 C++ 中,问题可以这样解决:
volatile double temp = x + h;
h = temp - x;
并且 volatile
修饰符禁用与变量 temp
相关的任何优化,因此我们确信“聪明”的编译器不会优化掉这两行。
我对 Haskell 的了解还不够多,还不知道如何解决这个问题。恐怕
let temp = x + h
hh = temp - x
in ((f $ x + hh) - (f x)) / h
将被 Haskell(或它使用的后端)优化掉。我如何在此处获得等效的 volatile
(如果可能的话,不牺牲懒惰)?我不介意 GHC 的具体答案。
最佳答案
我有两个解决方案和一个建议:
第一个解决方案:您可以保证不会使用两个辅助函数和 NOINLINE pragma 进行优化:
norm1 x h = x+h
{-# NOINLINE norm1 #-}
norm2 x tmp = tmp-x
{-# NOINLINE norm2 #-}
normh x h = norm2 x (norm1 x h)
这会奏效,但会产生少量成本。
第二种解决方案:使用 volatile 用 C 语言编写归一化函数,并通过 FFI 调用它。性能损失将是最小的。
现在建议:目前数学尚未优化,因此目前可以正常工作。您担心它会在未来的编译器中中断。我认为这不太可能,但也不是不太可能,我也不想防范它。因此,编写一些涵盖相关案例的单元测试。然后,如果它在未来确实发生故障(出于任何原因),您将确切知道原因。
关于optimization - Haskell 的有限差异,或如何禁用潜在的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5639603/
我有一个关于复杂性的简单问题。我在 Java 中有这段代码: pairs是 HashMap包含 Integer作为键,它的频率为 Collection作为一个值。所以: pairs = new Has
对于我的应用程序,我需要在 Coq 中使用和推理有限映射。谷歌搜索我发现 FMapAVL 似乎非常适合我的需求。问题是文档很少,我还没有弄清楚我应该如何使用它。 作为一个简单的例子,考虑以下使用对列表
我有一个主表tblAssetMaster A和一个移动表tblMovement M。 我想提取所有 Assets 及其当前位置,因此需要获取每个 Assets 的最新移动条目。 字段 A: Asset
我想让我的网站内容居中,但仅限于网页的特定宽度。所以当它超过 500px 时,我希望内容被修复,无法进一步拉伸(stretch)。无论如何都要这样做,还是我最好把所有东西都修好?希望有意义的是添加一些
我正在尝试批量删除 Backbone 模型的集合,如下所示...... collection.each(function(model, i){ model.destroy(); }); 我发现当每
我想要一个软件环境,在其中我可以在具有特定资源的硬件上测试我的软件的速度。例如,当我的主机硬件是具有 12GB RAM 的 3GHz 四核 amd64 时,该程序在具有 24 Mb RAM 的 800
在 Eclipse 中,我得到了 BigInteger.valueOf(2).pow(31093) 的值,但没有得到 BigInteger.valueOf(2).pow(31094) 的值(它是空的)
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
我想将 2 个表从本地 sql server 2000 上传到托管的 mysql。第一个表有 17 列和 680 行,其他 10 列和 8071 行。 我首先使用 xampp mysql 尝试离线,它
我在 S3 中自动生成并保存了静态 html 文件。有时文件大小达到 2mb。是否可以使用javascript来获取html文件的一部分,显示它,当用户到达页面底部时,获取下一部分等等? 最佳答案 X
我是一名优秀的程序员,十分优秀!