我正在使用一个PHP脚本,它有一个计算,给我一个数字。计算本身是一个黑盒子,我使用一个函数来访问它,它给了我一个数字。
所以:
$num = doCalc($some_arguments); //$num now has a non-zero numeric value
现在,我希望$num to be positive or negative
的符号基于另一个数字的符号。我知道我可以用“if-else”做到这一点,但是我试图检查没有逻辑分支的最佳方法。
所以我正在做的是将$ anotherNum的符号应用到$ num:
$anotherNum = -10; //for example...
$num = doCalc($some_arguments); //lets assume $num is 100...
$num = abs($num) * ($anotherNum/abs($anotherNum))
我不确定这是否是正确的方法,或者PHP是否具有可以轻松完成的功能。任何指针,任何人?
感谢。
答案 0 :(得分:1)
你可以通过多种方式做到这一点,你的方法可以改变总和值的精确度(在浮点数上),因为乘法和除法......这里有更多的选项让a
成为你的num
和b
anothernum
如果乘以不同极性的数字,结果为负
if ((a*b)<0.0) a=-a;
避免计算
if (((a<0.0)&&(b>0.0))||((a>0.0)&&(b<0.0))) a=-a;
签名位提取
用于32位浮点值:
unsigned int sa=(unsigned int*)(&a)[0]>>31;
unsigned int sb=(unsigned int*)(&b)[0]>>31;
if (sa!=sb) a=-a;
表示32位整数值:
if ((a&0x80000000)!=(b&0x80000000)) a=-a;
[注释]
b==0
... [edit1] no if if / else for floats
float a,b; // these are you numbers
unsigned int *pa=(unsigned int*)(&a);
unsigned int *pb=(unsigned int*)(&b);
*pa=((*pa)&0x7FFFFFFF)|((*pb)&0x80000000);
a
复制到b
pa,pb
只是指针处理a,b作为位访问的整数类型