求一算法!!现有一区间:$start--$end (例:5--10)。 给一变量$param: 如果$param 如果$param>$end 则$param=$end 不用if else,三元 等逻辑算法(虽然简单并且效率也高) 求实现此要求的数学算法 分享到: ------解决方案--------------------真的可以做到吗? 答案是肯定的。否则我也不会将他置顶了 我先来个抛砖引玉 function foo($a, $b, $c) { $f1 = -(($c - $a) >> 31); $f2 = -(($b - $c) >> 31); $f3 = 1 ^ ($f1 + $f2); return $f1 * max($a, $c) + $f2 * min($b, $c) + $f3 * $c; } echo foo(5, 10, 3); //5 echo foo(5, 10, 8); //8 echo foo(5, 10, 13); //10 登入後複製------解决方案-------------------- function foo($a, $b, $c) { Return (((($c-$a) + (($c-$a) >> 31)) ^ (($c-$a) >> 31)) - ((($c-$b) + (($c-$b) >> 31)) ^ (($c-$b) >> 31)) + $a + $b) / 2; } echo foo(20, 30, 50); // 30 登入後複製 这没用任何函数拉。 我去求经得到的, 算法有待研究。------解决方案-------------------- 引用: 真的可以做到吗? 答案是肯定的。否则我也不会将他置顶了 我先来个抛砖引玉 PHP code function foo($a, $b, $c) { $f1 = -(($c - $a) >> 31); $f2 = -(($b - $c) >> 31); $f3 = 1 ^ ($f1 + $f2); return $f1 * max($a, $c) + $f2 * min(…… 不懂PHP...但是这个答案提示也太明显了 于是写个C版本int的.. #include int middle(int a,int b,int c) { long long la=a; long long lb=b; long long lc=c; 登入後複製