我是你参考的那篇文章的作者 shines77,很荣幸搜到了你的文章,最近才发现,我以前的写的有一个漏洞,就是例如:uint32_t i = num / 7; 除数为 7, 14, 19, 21 等数的时候,计算出来的相乘系数M是不对的,需要修正。
比较正确的做法是,和编译器的做法一致:https://zhuanlan.zhihu.com/p/151038723
我在写:https://github.com/shines77/ArrayRotate 的时候发现了这个问题,并且做了修正,但是我的做法更测底一点,比编译器的做法更好,对于 7, 14, 19, 21 这种情况,编译器需要6条指令,我的做法只需要4条指令,最关键的是可以省掉两种情况的 if 判断。
具体的做法可以参考(这次我做得比较全面,希望不要留下bug,持续在改进中):
https://github.com/shines77/ArrayRotate/blob/master/src/jstd/FastDiv.h
或者
https://gitee.com/shines77/ArrayRotate/blob/master/src/jstd/FastDiv.h
由于代码越来越臃肿,FastDiv.h 和 FastMod.h 可能会重新另建一个单独的仓库。
IP属地:江西