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] cataphr...@php.net 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] ras...@php.net 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