我需要用于平衡三进制数系统的对称模运算符;它可以用于计算trits sum (三元加法函数)的最低有效trit;我的实现似乎效率低下,它使用2个模(%)运算符和几个加/减运算。下面是我的代码(它可以正常工作):
int symmetric_modulo( int x, int fullRadix = 3 ) {
int halfRadix = fullRadix / 2;
int divRemainder = x % fullRadix;
return ( divRemainder + halfRadix + fullRadix ) % fullRadix - halfRadix;
}
X可能在-3..3的范围内;结果应该是-1,0或1;你能提供更有效的代码来做到这一点吗?
发布于 2015-07-27 17:35:10
仅当x + halfRadix + fullRadix
溢出或结果为负时才需要int divRemainder = x % fullRadix;
。
如果在x may be in range [-3..3];
简化中没有可能出现溢出/负结果:
int symmetric_modulo(int x, int fullRadix) {
int halfRadix = fullRadix / 2;
return (x + halfRadix + fullRadix) % fullRadix - halfRadix;
}
https://stackoverflow.com/questions/31657279
复制