File tree Expand file tree Collapse file tree 2 files changed +8
-1
lines changed Expand file tree Collapse file tree 2 files changed +8
-1
lines changed Original file line number Diff line number Diff line change @@ -15,6 +15,8 @@ if (PHP_INT_SIZE != 4)
15
15
-3999999999999999475712. ,
16
16
-3999999999999998951424. ,
17
17
];
18
+ /* see if we're rounding negative numbers right */
19
+ $ values [] = -2147483649.8 ;
18
20
19
21
foreach ($ values as $ v ) {
20
22
var_dump ((int )$ v );
@@ -27,3 +29,4 @@ int(-2055733248)
27
29
int(-2055208960)
28
30
int(-2054684672)
29
31
int(-2054160384)
32
+ int(2147483647)
Original file line number Diff line number Diff line change @@ -77,7 +77,9 @@ static zend_always_inline long zend_dval_to_lval(double d)
77
77
78
78
dmod = fmod (d , two_pow_32 );
79
79
if (dmod < 0 ) {
80
- dmod += two_pow_32 ;
80
+ /* we're going to make this number positive; call ceil()
81
+ * to simulate rounding towards 0 of the negative number */
82
+ dmod = ceil (dmod ) + two_pow_32 ;
81
83
}
82
84
return (long )(unsigned long )dmod ;
83
85
}
@@ -93,6 +95,8 @@ static zend_always_inline long zend_dval_to_lval(double d)
93
95
94
96
dmod = fmod (d , two_pow_64 );
95
97
if (dmod < 0 ) {
98
+ /* no need to call ceil; original double must have had no
99
+ * fractional part, hence dmod does not have one either */
96
100
dmod += two_pow_64 ;
97
101
}
98
102
return (long )(unsigned long )dmod ;
You can’t perform that action at this time.
0 commit comments