CPUScalarBroadcastModulo.java

  1. package neureka.backend.main.implementations.broadcast;

  2. import neureka.backend.main.implementations.fun.api.CPUBiFun;

  3. public class CPUScalarBroadcastModulo extends CPUScalarBroadcast
  4. {
  5.     @Override
  6.     protected CPUBiFun _getFun() {
  7.         return new CPUBiFun() {
  8.             @Override public double  invoke(double a, double b) { return a % b; }
  9.             @Override public float   invoke(float a, float b) { return a % b; }
  10.             @Override public int     invoke(int a, int b) { return a % b; }
  11.             @Override public long    invoke(long a, long b) { return a % b; }
  12.         };
  13.     }

  14.     @Override
  15.     protected CPUBiFun _getDeriveAt0() {
  16.         return new CPUBiFun() {
  17.             @Override public double  invoke(double a, double b) { return 1 / b; }
  18.             @Override public float   invoke(float a, float b) { return 1 / b; }
  19.             @Override public int     invoke(int a, int b) { return (int) Math.round(1d / b); }
  20.             @Override public long    invoke(long a, long b) { return Math.round(1d / b); }
  21.         };
  22.     }

  23.     @Override
  24.     protected CPUBiFun _getDeriveAt1() {
  25.         return new CPUBiFun() {
  26.             @Override public double  invoke(double a, double b) { return -( a / Math.pow( b, 2 ) ); }
  27.             @Override public float   invoke(float a, float b) { return (float) -( a / Math.pow( b, 2 ) ); }
  28.             @Override public int     invoke(int a, int b) { return (int) Math.round( -a / Math.pow( b, 2 ) ); }
  29.             @Override public long    invoke(long a, long b) { return Math.round( -a / Math.pow( b, 2 ) ); }
  30.         };
  31.     }
  32. }