diff --git a/libavcodec/aac.c b/libavcodec/aac.c
index c59a663bec85e07be63388016e346760c05cff29..cc069ed7c666d7259c6f9a4f4c7ee6601befe5a5 100644
--- a/libavcodec/aac.c
+++ b/libavcodec/aac.c
@@ -753,7 +753,9 @@ static int decode_spectrum_and_dequant(AACContext * ac, float coef[1024], GetBit
     if (pulse_present) {
         for(i = 0; i < pulse->num_pulse; i++){
             float co  = coef_base[ pulse->pos[i] ];
-            float ico = co / sqrtf(sqrtf(fabsf(co))) + pulse->amp[i];
+            float ico = -pulse->amp[i];
+            if (co)
+                ico = co / sqrtf(sqrtf(fabsf(co))) + (co > 0 ? -ico : ico);
             coef_base[ pulse->pos[i] ] = cbrtf(fabsf(ico)) * ico;
         }
     }