LibAudio: Prevent overflow in QOA LMS prediction
This commit is contained in:
parent
ede8582def
commit
24f5914d18
Notes:
sideshowbarker
2024-07-16 20:39:14 +09:00
Author: https://github.com/kleinesfilmroellchen Commit: https://github.com/SerenityOS/serenity/commit/24f5914d18 Pull-request: https://github.com/SerenityOS/serenity/pull/20686 Reviewed-by: https://github.com/Hendiadyoin1
1 changed files with 4 additions and 3 deletions
|
@ -38,10 +38,11 @@ LMSState::LMSState(u64 history_packed, u64 weights_packed)
|
|||
|
||||
i32 LMSState::predict() const
|
||||
{
|
||||
i32 prediction = 0;
|
||||
// The spec specifies that overflows are not allowed, but we do a safe thing anyways.
|
||||
Checked<i32> prediction = 0;
|
||||
for (size_t i = 0; i < lms_history; ++i)
|
||||
prediction += history[i] * weights[i];
|
||||
return prediction >> 13;
|
||||
prediction.saturating_add(Checked<i32>::saturating_mul(history[i], weights[i]));
|
||||
return prediction.value() >> 13;
|
||||
}
|
||||
|
||||
void LMSState::update(i32 sample, i32 residual)
|
||||
|
|
Loading…
Add table
Reference in a new issue