summaryrefslogtreecommitdiff
path: root/ext/standard/array.c
diff options
context:
space:
mode:
authorSara Golemon <pollita@php.net>2003-04-03 18:33:05 +0000
committerSara Golemon <pollita@php.net>2003-04-03 18:33:05 +0000
commit465bb61357bca0b0014960d178024b4f5a1d8d8b (patch)
treeb813d11b70742703c709b18e2373edcb211cfe5b /ext/standard/array.c
parent7e2fcf986ee00e22e939d080a068795b25ce5db8 (diff)
downloadphp-git-465bb61357bca0b0014960d178024b4f5a1d8d8b.tar.gz
Kludgy fix for floating point drift causing problems like range(1.0,1.5,0.1) == array(1.0,1.1,1.2,1.3,1.4);
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r--ext/standard/array.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 58b5349bab..32a0edde6e 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -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 {