@@ -4,29 +4,12 @@ module Sass
44 module Value
55 # Sass's {FuzzyMath} module.
66 module FuzzyMath
7- PRECISION = 10
8-
9- EPSILON = 10 **( -PRECISION - 1 )
10-
11- INVERSE_EPSILON = 10 **( PRECISION + 1 )
7+ PRECISION = 11
128
139 module_function
1410
1511 def equals ( number1 , number2 )
16- return true if number1 == number2
17-
18- ( number1 - number2 ) . abs <= EPSILON &&
19- ( number1 * INVERSE_EPSILON ) . round ==
20- ( number2 * INVERSE_EPSILON ) . round
21- end
22-
23- def equals_nilable ( number1 , number2 )
24- return true if number1 == number2
25- return false if number1 . nil? || number2 . nil?
26-
27- ( number1 - number2 ) . abs <= EPSILON &&
28- ( number1 * INVERSE_EPSILON ) . round ==
29- ( number2 * INVERSE_EPSILON ) . round
12+ number1 == number2 || number1 . round ( PRECISION ) == number2 . round ( PRECISION )
3013 end
3114
3215 def less_than ( number1 , number2 )
@@ -49,31 +32,13 @@ def integer?(number)
4932 return false unless number . finite?
5033 return true if number . integer?
5134
52- equals ( ( number - 0.5 ) . abs % 1 , 0.5 )
35+ number . round == number . round ( PRECISION )
5336 end
5437
5538 def to_i ( number )
5639 integer? ( number ) ? number . round : nil
5740 end
5841
59- def round ( number )
60- if number . positive?
61- less_than ( number % 1 , 0.5 ) ? number . floor : number . ceil
62- else
63- less_than_or_equals ( number % 1 , 0.5 ) ? number . floor : number . ceil
64- end
65- end
66-
67- def sign ( number )
68- if number . positive?
69- 1
70- elsif number . negative?
71- -1
72- else
73- 0
74- end
75- end
76-
7742 def between ( number , min , max )
7843 return min if equals ( number , min )
7944 return max if equals ( number , max )
@@ -89,16 +54,12 @@ def assert_between(number, min, max, name)
8954 raise Sass ::ScriptError . new ( "#{ number } must be between #{ min } and #{ max } ." , name )
9055 end
9156
92- def clamp_like_css ( number , lower_bound , upper_bound )
57+ def _clamp_like_css ( number , lower_bound , upper_bound )
9358 number . to_f . nan? ? lower_bound : number . clamp ( lower_bound , upper_bound )
9459 end
9560
96- def hash ( number )
97- if number . finite?
98- ( number * INVERSE_EPSILON ) . round . hash
99- else
100- number . hash
101- end
61+ def _round ( number )
62+ number &.finite? ? number . round ( PRECISION ) . to_f : number
10263 end
10364 end
10465
0 commit comments