You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by lu...@apache.org on 2012/09/28 18:43:48 UTC
svn commit: r1391540 - in /commons/sandbox/nabla/trunk/src:
main/java/org/apache/commons/nabla/forward/arithmetic/DRemTransformer.java
test/java/org/apache/commons/nabla/forward/arithmetic/DRemGeneratorTest.java
Author: luc
Date: Fri Sep 28 16:43:47 2012
New Revision: 1391540
URL: http://svn.apache.org/viewvc?rev=1391540&view=rev
Log:
Fixed DREM transform.
The computation was wrong when first argument was a double and second
argument was a DerivativeStructure.
Modified:
commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/arithmetic/DRemTransformer.java
commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/arithmetic/DRemGeneratorTest.java
Modified: commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/arithmetic/DRemTransformer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/arithmetic/DRemTransformer.java?rev=1391540&r1=1391539&r2=1391540&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/arithmetic/DRemTransformer.java (original)
+++ commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/arithmetic/DRemTransformer.java Fri Sep 28 16:43:47 2012
@@ -76,21 +76,23 @@ public class DRemTransformer implements
list.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, DS_TYPE.getInternalName(),
"getValue",
Type.getMethodDescriptor(Type.DOUBLE_TYPE))); // => ds_b, b0
- list.add(new VarInsnNode(Opcodes.DLOAD, tmp1)); // => ds_b, b0, a
- list.add(new InsnNode(Opcodes.DUP2_X2)); // => ds_b, a, b0, a
- list.add(new InsnNode(Opcodes.POP2)); // => ds_b, a, b0
- list.add(new InsnNode(Opcodes.DREM)); // => ds_b, q=a%b0
-
- // TODO: the remaining computation is WRONG!
-
- list.add(new InsnNode(Opcodes.DNEG)); // => ds_b, -q
+ list.add(new InsnNode(Opcodes.DUP2)); // => ds_b, b0, b0
+ list.add(new VarInsnNode(Opcodes.DLOAD, tmp1)); // => ds_b, b0, b0, a
+ list.add(new InsnNode(Opcodes.DUP2_X2)); // => ds_b, b0, a, b0, a
+ list.add(new InsnNode(Opcodes.POP2)); // => ds_b, b0, a, b0
+ list.add(new InsnNode(Opcodes.DREM)); // => ds_b, b0, a%b0
+ list.add(new VarInsnNode(Opcodes.DLOAD, tmp1)); // => ds_b, b0, a%b0, a
+ list.add(new InsnNode(Opcodes.DSUB)); // => ds_b, b0, a%b0-a
+ list.add(new InsnNode(Opcodes.DUP2_X2)); // => ds_b, a%b0-a, b0, a%b0-a
+ list.add(new InsnNode(Opcodes.POP2)); // => ds_b, a%b0-a, b0
+ list.add(new InsnNode(Opcodes.DDIV)); // => ds_b, q=(a%b0-a)/b0
list.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, DS_TYPE.getInternalName(),
"multiply",
- Type.getMethodDescriptor(DS_TYPE, Type.DOUBLE_TYPE))); // => -q*b
- list.add(new VarInsnNode(Opcodes.DLOAD, tmp1)); // => -q*b, a
+ Type.getMethodDescriptor(DS_TYPE, Type.DOUBLE_TYPE))); // => q*b
+ list.add(new VarInsnNode(Opcodes.DLOAD, tmp1)); // => q*b, a
list.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, DS_TYPE.getInternalName(),
"add",
- Type.getMethodDescriptor(DS_TYPE, Type.DOUBLE_TYPE))); // => a-q*b
+ Type.getMethodDescriptor(DS_TYPE, Type.DOUBLE_TYPE))); // => a+q*b
}
Modified: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/arithmetic/DRemGeneratorTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/arithmetic/DRemGeneratorTest.java?rev=1391540&r1=1391539&r2=1391540&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/arithmetic/DRemGeneratorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/arithmetic/DRemGeneratorTest.java Fri Sep 28 16:43:47 2012
@@ -34,7 +34,7 @@ public class DRemGeneratorTest extends A
checkReference(new ReferenceFunction() {
public double value(double t) { return 5 % t; }
public double firstDerivative(double t) { return ((5 % t) - 5) / t; }
- }, 0.5, 10, 30, 1e-15);
+ }, 0.5, 10, 30, 5e-16);
}
@Test