From 9151eb591dcab408d3a7e4d9e3b3874c2e281acf Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Tue, 26 Jul 2016 17:24:34 -0300 Subject: Changed the way the step decimals are computed to a safer way, fixes many issues. --- core/math/math_funcs.cpp | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) (limited to 'core/math/math_funcs.cpp') diff --git a/core/math/math_funcs.cpp b/core/math/math_funcs.cpp index 0fbd03121..64615fe6b 100644 --- a/core/math/math_funcs.cpp +++ b/core/math/math_funcs.cpp @@ -206,25 +206,29 @@ double Math::ceil(double p_x) { return ::ceil(p_x); } -int Math::decimals(double p_step) { - - int max=4; - double llimit = Math::pow(0.1,max); - double ulimit = 1.0-llimit; - int i=0; - while( max) { - - float d = absf(p_step) - Math::floor(absf(p_step)); +int Math::step_decimals(double p_step) { + + static const int maxn=9; + static const double sd[maxn]={ + 0.9999, // somehow compensate for floating point error + 0.09999, + 0.009999, + 0.0009999, + 0.00009999, + 0.000009999, + 0.0000009999, + 0.00000009999, + 0.000000009999 + }; - if (dulimit) - break; - p_step*=10.0; - max--; - i++; + double as=absf(p_step); + for(int i=0;i=sd[i]) { + return i; + } } - return i; - + return maxn; } double Math::ease(double p_x, double p_c) { -- cgit v1.2.3-70-g09d2