INNER CODE UNIT · Rust
batch_inversion_allow_zeros
0xMiden/crypto · miden-crypto/src/lib.rs:184
pub fn batch_inversion_allow_zeros(values: &mut [Felt]) {
const CHUNK_SIZE: usize = 1024;
values.par_chunks_mut(CHUNK_SIZE).for_each(|output_chunk| {
let len = output_chunk.len();
let mut scratch = [ZERO; CHUNK_SIZE];
scratch[..len].copy_from_slice(output_chunk);
batch_inversion_helper(&scratch[..len], output_chunk);
});
}
/// Montgomery's trick for batch inversion, handling zeros.
fn batch_inversion_helper(values: &[Felt], result: &mut [Felt]) {
debug_assert_eq!(values.len(), result.len());
if values.is_empty() {
return;
}