diff --git a/src/share/replaygain_analysis/replaygain_analysis.c b/src/share/replaygain_analysis/replaygain_analysis.c
index 38e54b9..63f4294 100644
--- a/src/share/replaygain_analysis/replaygain_analysis.c
+++ b/src/share/replaygain_analysis/replaygain_analysis.c
@@ -536,7 +536,12 @@ analyzeResult ( Uint32_t* Array, size_t len )
     if ( elems == 0 )
         return GAIN_NOT_ENOUGH_SAMPLES;
 
+/* workaround for GCC bug #61423: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61423 */
+#if 0
     upper = (Int32_t) ceil (elems * (1. - RMS_PERCENTILE));
+#else
+    upper = (Int32_t) (elems / 20 + ((elems % 20) ? 1 : 0));
+#endif
     for ( i = len; i-- > 0; ) {
         if ( (upper -= Array[i]) <= 0 )
             break;
diff --git a/test/test_replaygain.sh b/test/test_replaygain.sh
index a847983..2909875 100755
--- a/test/test_replaygain.sh
+++ b/test/test_replaygain.sh
@@ -133,14 +133,13 @@ tonegenerator ()
 }
 
 REPLAYGAIN_FREQ=
-REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ  8000/-12.73"
+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ  8000/-12.76"
 REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 11025/-12.93"
-REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 11025/-12.93"
-REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 12000/-12.98"
-REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 16000/-13.27"
-REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 18900/-13.41"
+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 12000/-13.00"
+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 16000/-13.29"
+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 18900/-13.43"
 REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 22050/-13.77"
-REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 24000/-13.82"
+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 24000/-13.83"
 REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 28000/-14.06"
 REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 32000/-14.08"
 REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 36000/-14.12"
