liquid_feedback_core
changeset 370:794974af6d6d
Bugfix in "lf_update_suggestion_order" related to floating point error workaround
author | jbe |
---|---|
date | Sun Mar 17 16:15:28 2013 +0100 (2013-03-17) |
parents | cad83f274b79 |
children | 8344753f2ac1 |
files | lf_update_suggestion_order.c |
line diff
1.1 --- a/lf_update_suggestion_order.c Sun Mar 17 16:06:16 2013 +0100 1.2 +++ b/lf_update_suggestion_order.c Sun Mar 17 16:15:28 2013 +0100 1.3 @@ -33,7 +33,6 @@ 1.4 struct candidate { 1.5 char *key; 1.6 double score_per_step; 1.7 - int reaches_score; 1.8 double score; 1.9 int seat; 1.10 }; 1.11 @@ -95,7 +94,6 @@ 1.12 if (remaining <= 1) break; 1.13 for (i=0; i<candidate_count; i++) { 1.14 candidates[i].score_per_step = 0.0; 1.15 - candidates[i].reaches_score = 0; 1.16 } 1.17 for (i=0; i<ballot_count; i++) { 1.18 for (j=0; j<4; j++) { 1.19 @@ -126,13 +124,14 @@ 1.20 max_scale = (1.0-candidates[i].score) / candidates[i].score_per_step; 1.21 if (scale == 0.0 || max_scale <= scale) { 1.22 scale = max_scale; 1.23 - candidates[i].reaches_score = 1; 1.24 } 1.25 } 1.26 } 1.27 for (i=0; i<candidate_count; i++) { 1.28 if (candidates[i].score_per_step > 0.0) { 1.29 - if (candidates[i].reaches_score) { 1.30 + double max_scale; 1.31 + max_scale = (1.0-candidates[i].score) / candidates[i].score_per_step; 1.32 + if (max_scale == scale) { 1.33 candidates[i].score = 1.0; 1.34 remaining--; 1.35 } else {