diff --git a/libswresample/swresample.c b/libswresample/swresample.c
index e480269d05ce73ade905f4e63acfe784e2f50517..8e238998e96842168e26c50db0d910975e6db0dc 100644
--- a/libswresample/swresample.c
+++ b/libswresample/swresample.c
@@ -650,7 +650,7 @@ static int swr_convert_internal(struct SwrContext *s, AudioData *out, int out_co
                 return ret;
             if(ret)
                 for(ch=0; ch<s->dither.noise.ch_count; ch++)
-                    if((ret=swri_get_dither(s, s->dither.noise.ch[ch], s->dither.noise.count, 12345678913579<<ch, s->dither.noise.fmt))<0)
+                    if((ret=swri_get_dither(s, s->dither.noise.ch[ch], s->dither.noise.count, (12345678913579ULL*ch + 3141592) % 2718281828U, s->dither.noise.fmt))<0)
                         return ret;
             av_assert0(s->dither.noise.ch_count == preout->ch_count);