Incorrect rounding of negative numbers

Bug description

Rounding using (+0.5f) followed by truncation rounds the wrong way for negative numbers. Alternatives which does correct rounding:

  1. (int16_t) floor(x + 0.5f)
  2. (int16_t) (x + sign(x) * 0.5f)
  3. (int16_t) roundf(x)

The lines below need a closer look: (main, commit SHA 67672513)

  • https://forge.3gpp.org/rep/ivas-codec-pc/ivas-codec/-/blob/main/lib_dec/ivas_ism_renderer.c#L183
  • https://forge.3gpp.org/rep/ivas-codec-pc/ivas-codec/-/blob/main/lib_rend/ivas_sba_rendering.c#L311
  • https://forge.3gpp.org/rep/ivas-codec-pc/ivas-codec/-/blob/main/lib_dec/ivas_dirac_dec.c#L1642-1643
  • https://forge.3gpp.org/rep/ivas-codec-pc/ivas-codec/-/blob/main/lib_dec/ivas_dirac_dec.c#L3320-3321
  • https://forge.3gpp.org/rep/ivas-codec-pc/ivas-codec/-/blob/main/lib_dec/ivas_ism_renderer.c#L183-184
  • https://forge.3gpp.org/rep/ivas-codec-pc/ivas-codec/-/blob/main/lib_dec/ivas_spar_md_dec.c#L2598-2599
  • https://forge.3gpp.org/rep/ivas-codec-pc/ivas-codec/-/blob/main/lib_rend/ivas_sba_rendering.c#L557
Assignee Loading
Time tracking Loading