fn strong_reduce(a: &mut U56x8) {
        P448GoldilocksPrimeField::weak_reduce(a);

        const MODULUS: U56x8 = U56x8 {
            limbs: [
                0xffffffffffffff,
                0xffffffffffffff,
                0xffffffffffffff,
                0xffffffffffffff,
                0xfffffffffffffe,
                0xffffffffffffff,
                0xffffffffffffff,
                0xffffffffffffff,
            ],
        };
        let mask = (1u128 << 56) - 1;

        let mut scarry = 0i128;
        for i in 0..8 {
            scarry = scarry + (a.limbs[i] as i128) - (MODULUS.limbs[i] as i128);
            a.limbs[i] = ((scarry as u128) & mask) as u64;
            scarry >>= 56;
        }

        assert!((scarry as u64) == 0 || (scarry as u64).wrapping_add(1) == 0);

        let scarry_0 = scarry as u64;
        let mut carry = 0u128;

        for i in 0..8 {
            carry = carry + (a.limbs[i] as u128) + ((scarry_0 & MODULUS.limbs[i]) as u128);
            a.limbs[i] = (carry & mask) as u64;
            carry >>= 56;
        }

        assert!((carry as u64).wrapping_add(scarry_0) == 0);
    }
Reduces the number to its canonical form
Taken from https://sourceforge.net/p/ed448goldilocks/code/ci/master/tree/src/per_field/f_generic.tmpl.c
crates/math/src/field/fields/p448_goldilocks_prime_field.rs