【发布时间】:2015-09-22 11:05:25
【问题描述】:
在 Coursera 课程 Functional Programming Principles in Scala 中,讲师谈到了 Fixed Point 并编写了一些简单的实现。
def isCloseEnough(x: Double, y: Double) =
math.abs((x - y) / x) / x < tolerance
def fixedPoint(f: Double => Double)(guess: Double) = {
def iterate(guess: Double): Double = {
val next = f(guess)
if (isCloseEnough(guess, next)) next
else iterate(next)
}
iterate(guess)
}
这样的实现将允许以下函数f(x) = 1 + x 有一个不动点。
但是,这不应该永远发生。 就像在这个函数图中:
这就是维基百科所说的:
并非所有函数都有固定点:例如,如果 f 是一个函数 在实数上定义为 f(x) = x + 1,则它没有固定的 点,因为对于任何实数,x 永远不会等于 x + 1。
这里的重点在于isCloseEnough,我不明白为什么要这样写。
我来这里是为了了解isCloseEnough 以及它为何以这种方式实施
就是这样。
【问题讨论】:
标签: scala computer-science fixed-point-iteration