【发布时间】:2012-02-25 01:32:58
【问题描述】:
A post from another thread 表示如果一个函数可以在不改变结果的情况下多次调用,则称该函数为幂等。
但是使用的术语(如无副作用和返回相同的结果)相对模棱两可。考虑这段代码:
public class test {
int x = 0;
java.util.Random r = new java.util.Random();
public int F() {
return x + 1;
}
public void F2() {
x = r.nextInt();
}
}
我们可以说F() 是幂等的,因为对F() 的连续调用返回相同的值吗?
或者如果在两者之间调用F2(),那么连续调用F() 不会返回相同的值,这不是幂等的吗?
PS:“幂等”在计算机科学而非数学中定义。
【问题讨论】:
-
对不起,“返回相同的结果”或“无副作用”有什么歧义?
-
为什么对这个问题投反对票?它有用、清晰,并且显示了一些研究成果。
-
@Ingo: 如果我打电话给
fesetround,sqrt的输出会改变。 -
@Ingo:嗯。 C 标准实际上对浮点函数的准确性相当宽松,
fesetround甚至不能保证实际做任何事情,因此不能保证它确实会改变结果。但是假设一个实现从sqrt返回正确舍入的结果,这是标准允许的,那么我应该认为当前的舍入模式会影响结果是显而易见的。当我说输出“可以改变”时,这就是我的意思。诚然,只有 1 ulp,但这仍然是不同的结果。 -
我认为我从这个问题中学到的东西比 SE 上的任何其他问题都多。
标签: java language-agnostic idempotent