Alm*_*ous 18 math conditional algebra max min
- - - - - 更新 - - - - - -
到目前为止,codymanix和moonshadow一直是一个很大的帮助.我能够使用方程解决我的问题,而不是使用右移我除以29.因为32位签名2 ^ 31 =溢出到29.哪个有效!
PHP中的原型
$r = $x - (($x - $y) & (($x - $y) / (29)));
Run Code Online (Sandbox Code Playgroud)
LEADS的实际代码(你只能做一个数学函数PER LINE !!! AHHHH !!!)
DERIVDE1 = IMAGE1 - IMAGE2;
DERIVED2 = DERIVED1 / 29;
DERIVED3 = DERIVED1 AND DERIVED2;
MAX = IMAGE1 - DERIVED3;
Run Code Online (Sandbox Code Playgroud)
----------原始问题-----------
我不认为这很可能与我的应用程序的限制有关,但我认为值得一试.
我会尽力做到这一点.我需要找到两个数字之间的最大值,而不能使用IF或任何条件语句.
为了找到MAX值,我只能执行以下功能
Divide, Multiply, Subtract, Add, NOT, AND ,OR
Run Code Online (Sandbox Code Playgroud)
假设我有两个数字
A = 60;
B = 50;
Run Code Online (Sandbox Code Playgroud)
现在,如果A总是大于B,那么找到最大值就很简单了
MAX = (A - B) + B;
ex.
10 = (60 - 50)
10 + 50 = 60 = MAX
Run Code Online (Sandbox Code Playgroud)
问题是A并不总是大于B.我无法使用我正在使用的脚本应用程序执行ABS,MAX,MIN或条件检查.
有没有办法使用上面的限制操作来找到非常接近最大值的值?
小智 23
我想如果我们设法找到两个数字之间的差异(只有幅度不符号),这个将是最简单的
max = ((a+b)+|a-b|)/2;
Run Code Online (Sandbox Code Playgroud)
哪个|a-b|是a和之间的差异b.
没有条件的解决方案.转换为uint然后返回int以获得abs.
int abs (a) { return (int)((unsigned int)a); }
int max (a, b) { return (a + b + abs(a - b)) / 2; }
int max3 (a, b, c) { return (max(max(a,b),c); }
Run Code Online (Sandbox Code Playgroud)