Doc #73770 [Com]: Truth table errors

From: Date: Sat, 17 Dec 2016 19:21:12 +0000
Subject: Doc #73770 [Com]: Truth table errors
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-14265@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=73770&edit=1 ID: 73770 Comment by: andrewgrom at rambler dot ru Reported by: rjhdby@php.net Summary: Truth table errors Status: Open Type: Documentation Problem Package: COM related PHP Version: Irrelevant Block user comment: N Private report: N New Comment: My mistake in previsious comment. You are right, "true->false should be false ("true implies false" is wrong). true->null, null->false, and null->null should all be unknown." Previous Comments: ------------------------------------------------------------------------ [2016-12-17 18:19:48] andrewgrom at rambler dot ru The problem is more complex. It is bitwise operation. $T = new VARIANT(255,VT_UI1); $F = new VARIANT(0,VT_UI1); $N = new VARIANT(VT_NULL,VT_UI1); echo variant_imp($T, $F).PHP_EOL; echo variant_imp($T, $T).PHP_EOL; echo variant_imp($T, $N).PHP_EOL; echo variant_imp($F, $F).PHP_EOL; echo variant_imp($F, $T).PHP_EOL; echo variant_imp($F, $N).PHP_EOL; echo variant_imp($N, $F).PHP_EOL; echo variant_imp($N, $T).PHP_EOL; echo variant_imp($N, $N).PHP_EOL; 0 255 1 <--- Not null 255 255 255 254 <--- Not null. True in all bits except one 255 255 <--- Totaly not null. True in all bits ------------------------------------------------------------------------ [2016-12-17 11:41:20] requinix@php.net When I try foreach ([true, false, null] as $i) foreach ([true, false, null] as $j) { $v = variant_imp($i, $j); $v = (variant_get_type($v) == VT_NULL ? null : (int)$v); printf("variant_imp(%s, %s) = %s\n", json_encode($i), json_encode($j), json_encode($v)); } I get variant_imp(true, true) = -1 variant_imp(true, false) = 0 variant_imp(true, null) = null variant_imp(false, true) = -1 variant_imp(false, false) = -1 variant_imp(false, null) = -1 variant_imp(null, true) = -1 variant_imp(null, false) = null variant_imp(null, null) = null true->false should be false ("true implies false" is wrong). true->null, null->false, and null->null should all be unknown. ------------------------------------------------------------------------ [2016-12-17 09:12:19] rjhdby@php.net Description: ------------ --- From manual page: http://www.php.net/function.variant-imp --- Truth table for bitwise implication is not correct. Must be If left is If right is then the result is TRUE TRUE TRUE TRUE FALSE TRUE >> FALSE TRUE NULL TRUE >> FALSE FALSE TRUE TRUE FALSE FALSE TRUE FALSE NULL TRUE NULL TRUE TRUE NULL FALSE NULL >> TRUE NULL NULL NULL >> TRUE ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=73770&edit=1

« previous php.doc.bugs (#14265) next »