public static float MaxAbs(ReadOnlySpan <float> source) { Contracts.AssertNonEmpty(source); if (Avx.IsSupported) { return(AvxIntrinsics.MaxAbsU(source)); } else if (Sse.IsSupported) { return(SseIntrinsics.MaxAbsU(source)); } else { float max = 0; for (int i = 0; i < source.Length; i++) { float abs = Math.Abs(source[i]); if (abs > max) { max = abs; } } return(max); } }
private static float MaxAbs(Span <float> src) { if (Avx.IsSupported) { return(AvxIntrinsics.MaxAbsU(src)); } else if (Sse.IsSupported) { return(SseIntrinsics.MaxAbsU(src)); } else { float max = 0; for (int i = 0; i < src.Length; i++) { float abs = Math.Abs(src[i]); if (abs > max) { max = abs; } } return(max); } }
public float MaxAbsU() => AvxIntrinsics.MaxAbsU(new Span <float>(src, 0, Length));
public float ManagedMaxAbsUPerf() { return(AvxIntrinsics.MaxAbsU(new Span <float>(src, 0, LEN))); }