diff --git a/Libraries/NativeAnimation/Nodes/RCTModuloAnimatedNode.m b/Libraries/NativeAnimation/Nodes/RCTModuloAnimatedNode.m index e9b6f13b2a4..e75391c6dc0 100644 --- a/Libraries/NativeAnimation/Nodes/RCTModuloAnimatedNode.m +++ b/Libraries/NativeAnimation/Nodes/RCTModuloAnimatedNode.m @@ -15,7 +15,8 @@ NSNumber *inputNode = self.config[@"input"]; NSNumber *modulus = self.config[@"modulus"]; RCTValueAnimatedNode *parent = (RCTValueAnimatedNode *)[self.parentNodes objectForKey:inputNode]; - self.value = fmodf(parent.value, modulus.floatValue); + const float m = modulus.floatValue; + self.value = fmodf(fmodf(parent.value, m) + m, m); } @end diff --git a/ReactAndroid/src/main/java/com/facebook/react/animated/ModulusAnimatedNode.java b/ReactAndroid/src/main/java/com/facebook/react/animated/ModulusAnimatedNode.java index 6d90a827294..e1e7be68535 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/animated/ModulusAnimatedNode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/animated/ModulusAnimatedNode.java @@ -29,7 +29,8 @@ import com.facebook.react.bridge.ReadableMap; public void update() { AnimatedNode animatedNode = mNativeAnimatedNodesManager.getNodeById(mInputNode); if (animatedNode != null && animatedNode instanceof ValueAnimatedNode) { - mValue = ((ValueAnimatedNode) animatedNode).getValue() % mModulus; + final double value = ((ValueAnimatedNode) animatedNode).getValue(); + mValue = (value % mModulus + mModulus) % mModulus; } else { throw new JSApplicationCausedNativeException("Illegal node ID set as an input for " + "Animated.modulus node");