1 use crate::traits::{Context, Float};
3 pub fn abs_f16<Ctx: Context>(ctx: Ctx, x: Ctx::VecF16) -> Ctx::VecF16 {
4 Ctx::VecF16::from_bits(x.to_bits() & ctx.make(0x7FFFu16))
7 pub fn abs_f32<Ctx: Context>(ctx: Ctx, x: Ctx::VecF32) -> Ctx::VecF32 {
8 Ctx::VecF32::from_bits(x.to_bits() & ctx.make(!(1u32 << 31)))
11 pub fn abs_f64<Ctx: Context>(ctx: Ctx, x: Ctx::VecF64) -> Ctx::VecF64 {
12 Ctx::VecF64::from_bits(x.to_bits() & ctx.make(!(1u64 << 63)))
20 scalar::{Scalar, Value},
26 should_panic(expected = "f16 feature is not enabled")
29 for bits in 0..=u16::MAX {
30 let v = F16::from_bits(bits);
31 let expected = v.abs();
32 let result = abs_f16(Scalar, Value(v)).0;
33 assert_eq!(expected.to_bits(), result.to_bits());
39 for bits in (0..=u32::MAX).step_by(10001) {
40 let v = f32::from_bits(bits);
41 let expected = v.abs();
42 let result = abs_f32(Scalar, Value(v)).0;
43 assert_eq!(expected.to_bits(), result.to_bits());
49 for bits in (0..=u64::MAX).step_by(100_000_000_000_001) {
50 let v = f64::from_bits(bits);
51 let expected = v.abs();
52 let result = abs_f64(Scalar, Value(v)).0;
53 assert_eq!(expected.to_bits(), result.to_bits());