aboutsummaryrefslogtreecommitdiff
path: root/core/math/math_funcs.cpp
diff options
context:
space:
mode:
authorJuan Linietsky2016-07-26 17:24:34 -0300
committerJuan Linietsky2016-07-26 17:25:10 -0300
commit9151eb591dcab408d3a7e4d9e3b3874c2e281acf (patch)
tree15531f24cc3ec63a13810bb442a68472f3f77de9 /core/math/math_funcs.cpp
parent8d4d167234e08fe0de74ea29814febd5b7a272f8 (diff)
downloadgodot-9151eb591dcab408d3a7e4d9e3b3874c2e281acf.tar.gz
godot-9151eb591dcab408d3a7e4d9e3b3874c2e281acf.tar.zst
godot-9151eb591dcab408d3a7e4d9e3b3874c2e281acf.zip
Diffstat (limited to 'core/math/math_funcs.cpp')
-rw-r--r--core/math/math_funcs.cpp34
1 files changed, 19 insertions, 15 deletions
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 Math::step_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));
+ 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 (d<llimit || d>ulimit)
- break;
- p_step*=10.0;
- max--;
- i++;
+ double as=absf(p_step);
+ for(int i=0;i<maxn;i++) {
+ if (as>=sd[i]) {
+ return i;
+ }
}
- return i;
-
+ return maxn;
}
double Math::ease(double p_x, double p_c) {