final int SAMPLES_DEFAULT = 40; private static final VectorSpecies<Double> SPECIES = DoubleVector.SPECIES_256; static DoubleVector fromValues(double x, double y, double z) { return DoubleVector.fromArray(SPECIES, new double[]{x, y, z, 0}, 0); } static DoubleVector normalize(DoubleVector v) { double dist = sqrt(v.mul(v).reduceLanes(VectorOperators.ADD)); return v.div(dist); } static double dot(DoubleVector v, DoubleVector b) { return v.mul(b).reduceLanes(VectorOperators.ADD); } // cross: static VectorShuffle yzx = VectorShuffle.fromValues(SPECIES, 1, 2, 0, 3); static DoubleVector mod(DoubleVector v, DoubleVector b) { // return v.rearrange(yzx).mul(b.rearrange(zxy)).sub(v.rearrange(zxy).mul(b.rearrange(yzx))); return v.mul(b.rearrange(yzx)).sub(v.rearrange(yzx).mul(b)).rearrange(yzx); }