对于一个赋值,我必须实现我自己的浮点数。它们对我能想到的许多可能的输入组合都有效,所以我开始用随机值做一个JUnit测试。现在我遇到了一些麻烦,在方法调用assertEquals(String message,Double expected,Double actual,Double delta)中动态设置delta值。
这是我的试验方法:
@Test
public void testRandomMath() {
DoubleStream doubleStream = ThreadLocalRandom.current().doubles(100);
//limiting the doubles to be withing a workable range for my ownFloat class
double[] doubles = doubleStream.map(d -> {
if (ThreadLocalRandom.current().nextBoolean()) {
return d * -1d;
}
else {
return d;
}
}).map(d -> d * Math.pow(2, ThreadLocalRandom.current().nextInt(-8, 9))).toArray();
OwnFloat[] ownFloats = new OwnFloat[doubles.length];
for (int i = 0; i < doubles.length; i++) {
ownFloats[i] = new OwnFloat(doubles[i]);
}
for (int i = 0; i < doubles.length; i++) {
for (int j = 0; j < doubles.length; j++) {
assertEquals("Failed " + doubles[i] + " + " + doubles[j],doubles[i] + doubles[j], ownFloats[i].add(ownFloats[j]).toDouble(), Math.min(doubles[i], doubles[j]));
assertEquals("Failed " + doubles[i] + " - " + doubles[j], doubles[i] - doubles[j], ownFloats[i].sub(ownFloats[j]).toDouble(), Math.min(doubles[i], doubles[j]));
}
}
}
这是测试错误:
java.lang.AssertionError: Failed -0.01393084463838419 + -0.01393084463838419
Expected :-0.02786168927676838
Actual :-0.027861595153808594
关于delta的工作原理,我错在哪里了?我能用什么来代替输入的最小值作为delta值呢?
此致,兰塔纳
2条答案
按热度按时间xtupzzrd1#
经过一些测试,我发现delta必须是一个正值。
作为增量。
qco9c6ql2#
您应该根据您的用例直接设置
delta
。在您的情况下,
delta = 1e-6
应该足够了。