如何最快地实现
template <typename T>
unsigned highest_decimal_digit(T x);
(返回例如356431的3,71的7和9的9)?
我能想到的最好方法是:
- constexpr-计算适合T的“中等大小”10次幂。
- 执行二进制搜索(在10次幂上,可能使用constexpr构造的查找表),以找到p,低于x的最高10次幂。
- 返回x除以p
注意:
- 我用C++14ish术语表达了问题和我的方法,代码解决方案很好,但抽象解决方案(甚至是x86_64汇编中的解决方案)都可以。不过,我希望能够适用于所有(无符号)整数类型。
- 您可以忽略有符号整数类型。
- 我没有指定“快速”的含义,但请考虑硬件因素。