improve the rice parameter calculation
diff --git a/src/libFLAC/stream_encoder.c b/src/libFLAC/stream_encoder.c
index 14ea34e..7e22441 100644
--- a/src/libFLAC/stream_encoder.c
+++ b/src/libFLAC/stream_encoder.c
@@ -1671,17 +1671,19 @@
 				else
 					partition_samples -= predictor_order;
 			}
-			mean = partition_samples >> 1;
 #ifdef FLAC__PRECOMPUTE_PARTITION_SUMS
-			mean += abs_residual_partition_sums[partition];
+			mean = abs_residual_partition_sums[partition];
 #else
+			mean = 0;
 			save_residual_sample = residual_sample;
 			for(partition_sample = 0; partition_sample < partition_samples; residual_sample++, partition_sample++)
 				mean += abs_residual[residual_sample];
 			residual_sample = save_residual_sample;
 #endif
-			mean /= partition_samples;
 #ifdef FLAC__SYMMETRIC_RICE
+			mean += partition_samples >> 1; /* for rounding effect */
+			mean /= partition_samples;
+
 			/* calc rice_parameter = floor(log2(mean)) */
 			rice_parameter = 0;
 			mean>>=1;
@@ -1690,12 +1692,9 @@
 				mean >>= 1;
 			}
 #else
-			/* calc rice_parameter = floor(log2(mean)) + 1 */
-			rice_parameter = 0;
-			while(mean) {
-				rice_parameter++;
-				mean >>= 1;
-			}
+			/* calc rice_parameter ala LOCO-I */
+			for(rice_parameter = 0; (partition_samples<<rice_parameter) < mean; rice_parameter++)
+				;
 #endif
 			if(rice_parameter >= FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER)
 				rice_parameter = FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER - 1;