]> granicus.if.org Git - php/commitdiff
Kludgy fix for floating point drift causing problems like range(1.0,1.5,0.1) == array...
authorSara Golemon <pollita@php.net>
Thu, 3 Apr 2003 18:33:05 +0000 (18:33 +0000)
committerSara Golemon <pollita@php.net>
Thu, 3 Apr 2003 18:33:05 +0000 (18:33 +0000)
ext/standard/array.c

index 58b5349bab881b42a718166571ece9ff3210068d..32a0edde6e2be2473be0e4dee2620d683b1baff7 100644 (file)
@@ -81,6 +81,8 @@ php_array_globals array_globals;
 #define INTERSECT_NORMAL               0
 #define INTERSECT_ASSOC                        1
 
+#define DOUBLE_DRIFT_FIX       0.000000000000001
+
 PHP_MINIT_FUNCTION(array)
 {
 #ifdef ZTS
@@ -1543,7 +1545,7 @@ double_str:
                                err = 1;
                                goto err;
                        }
-                       for (; low >= high; low -= step) {
+                       for (; low >= (high - DOUBLE_DRIFT_FIX); low -= step) {
                                add_next_index_double(return_value, low);
                        }       
                } else if (high > low) {        /* Positive steps */
@@ -1551,7 +1553,7 @@ double_str:
                                err = 1;
                                goto err;
                        }
-                       for (; low <= high; low += step) {
+                       for (; low <= (high + DOUBLE_DRIFT_FIX); low += step) {
                                add_next_index_double(return_value, low);
                        }       
                } else {