Edit report at http://bugs.php.net/bug.php?id=53045&edit=1
ID: 53045
User updated by: remy at wh dot nl
Reported by: remy at wh dot nl
Summary: broken result of intval()
-Status: Feedback
+Status: Open
Type: Bug
Package: *Math Functions
Operating System: FreeBSD
PHP Version: 5.2.14
Block user comment: N
New Comment:
var_dump( unpack("H*",pack("d", 3.0000)) );
var_dump( unpack("H*",pack("d", log(8,2))) );
array(1) {
[1]=>
string(16) "0000000000000840"
}
array(1) {
[1]=>
string(16) "ffffffffffff0740"
}
Previous Comments:
------------------------------------------------------------------------
[2010-10-13 05:25:02] [email protected]
I can't reproduce on mipsel/32-bit/Linux, PHP 5.2.14.
Can you show us the result of this:
<?php
var_dump( unpack("H*",pack("d", 3.0000)) );
var_dump( unpack("H*",pack("d", log(8,2))) );
I get
array(1) {
[1]=>
string(16) "0000000000000840"
}
array(1) {
[1]=>
string(16) "0000000000000840"
}
------------------------------------------------------------------------
[2010-10-12 19:33:45] remy at wh dot nl
CPU: Intel(R) Pentium(R) 4 CPU 3.20GHz (3211.39-MHz 686-class CPU)
Origin = "GenuineIntel" Id = 0xf43 Family = f Model = 4 Stepping =
3
Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DT
S,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
Features2=0x649d<SSE3,DTES64,MON,DS_CPL,EST,CNXT-ID,CX16,xTPR>
AMD Features=0x20000000<LM>
Logical CPUs per core: 2
------------------------------------------------------------------------
[2010-10-12 19:30:32] remy at wh dot nl
Yes, 32bit, here is some hardware and OS info from sysctl:
kern.ostype: FreeBSD
kern.osrelease: 7.3-STABLE
kern.osrevision: 199506
kern.version: FreeBSD 7.3-STABLE #7: Thu Jul 15 20:09:49 CEST 2010
kern.maxvnodes: 100000
kern.maxproc: 6164
kern.maxfiles: 12328
kern.argmax: 262144
kern.securelevel: -1
kern.clockrate: { hz = 1000, tick = 1000, profhz = 2000, stathz = 133 }
kern.posix1version: 200112
kern.ngroups: 16
kern.job_control: 1
kern.saved_ids: 0
kern.boottime: { sec = 1281862574, usec = 963320 } Sun Aug 15 10:56:14
2010
kern.domainname:
kern.osreldate: 703100
kern.bootfile: /boot/kernel/kernel
kern.maxfilesperproc: 11095
kern.maxprocperuid: 5547
hw.machine: i386
hw.model: Intel(R) Pentium(R) 4 CPU 3.20GHz
hw.ncpu: 2
hw.byteorder: 1234
hw.physmem: 2134020096
hw.usermem: 1906421760
hw.pagesize: 4096
hw.floatingpoint: 1
hw.machine_arch: i386
hw.realmem: 2147155968
------------------------------------------------------------------------
[2010-10-12 19:06:39] [email protected]
Only a problem on 32-bit systems I assume? I can't reproduce it here,
but all my
stuff is 64-bit.
------------------------------------------------------------------------
[2010-10-12 18:34:15] remy at wh dot nl
Description:
------------
intval(log(8,2)) gives 2 as result, expected 3
Test script:
---------------
<?php
$maxrounds = log(8, 2);
echo 'test:'.$maxrounds."\n";
echo 'test:'.log(8,2)."\n";
echo 'intval:'.intval(3.0000)."\n";
echo 'intval:'.intval(log(8,2))."\n";
echo 'intval:'.intval($maxrounds)."\n";
echo 'intval+1:'.(intval($maxrounds)+1)."\n";
echo 'intval+1:'.intval($maxrounds+1)."\n";
echo 'intval+1:'.intval($maxrounds + 1)."\n";
echo 'sprintf dec:'.sprintf('%d', $maxrounds)."\n";
echo 'sprintf float:'.sprintf('%f', $maxrounds)."\n";
echo 'sprintf float non-locale:'.sprintf('%F', $maxrounds)."\n";
var_dump($maxrounds)."\n";
?>
Expected result:
----------------
test:3
test:3
intval:3
intval:3
intval:3
intval+1:4
intval+1:4
intval+1:4
sprintf dec:3
sprintf float:3.000000
sprintf float non-locale:3.000000
float(3)
Actual result:
--------------
test:3
test:3
intval:3
intval:2
intval:2
intval+1:3
intval+1:3
intval+1:3
sprintf dec:2
sprintf float:3.000000
sprintf float non-locale:3.000000
float(3)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=53045&edit=1