找回密码
 欢迎注册
楼主: liangbch

[擂台] 求一个无符号整数的10进制位数

[复制链接]
发表于 2009-2-4 21:25:36 | 显示全部楼层
SSE2做这个题目可能能超过宝宝的代码 emms在浮点前用就可以了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-4 21:25:45 | 显示全部楼层
我还计划 64位 的 HugeCalc, 将主动放弃对部分老型号的 CPU 的支持(即无相关指令集的), 追求的就是效率。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-4 21:28:16 | 显示全部楼层
支持64位的系统,目前似乎都支持SSE2 当然Cell和MIPS等不是你考虑的吧,哈哈
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-2-4 21:28:31 | 显示全部楼层
回19#,这样虽然没有跳转指令,但对于任意一个输入,都要执行好多条指令,而我的那个汇编版本,对于任意一个数,最多仅需要执行8条指令。 另外,无心人如有时间的话,可测试一下各个版本,看看那个更快。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-4 21:30:27 | 显示全部楼层
就是说,要找到个少于8条指令的SIMD版本
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-4 21:36:42 | 显示全部楼层
刚尝试SSE2,大概在20条指令左右, 不理想
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-5 08:23:40 | 显示全部楼层
利用宝宝的思路能得到一个简单的汇编算法 假设初始化一个表,有32项,每项两个值, 对i = 0..31 第一个是2^i, 如果2^i < 10^k < 2^(i+1), 则是10^k 第二个是第一个的题目意义的位数 假设表名t t [] = {1, 1, 2, 1, 4, 1, 10, 2, 16, 2, 32, 2, 100, 3, 128, 3, 256, 3, 1000, 4, 1024, 4, 2048, 4, 4096, 4, 10000, 5, 16384, 5, 32468, 5 100000, 6, 131072, 6, 262144, 6, 1000000, 7, 1048576, 7, 2097152, 7, 4194304, 7, 10000000, 8, 16777216, 8 33554432, 8, 100000000, 9, 134217728, 9, 268435456, 9, 1000000000, 10, 1073741824, 10, 2147483648, 10}
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-5 08:26:08 | 显示全部楼层
mov edx, n bsr ecx, edx push ebx mov eax, [t + ecx * 8 + 4] mov ebx, eax sub ebx, 1 cmp edx, [t + ecx * 8] cmovb eax, ebx pop ebx ===================== 9条指令
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-5 08:29:19 | 显示全部楼层
或者利用setcc mov edx, n bsr ecx, edx mov eax, [t + ecx * 8 + 4] push ebx xor ebx, ebx cmp edx, [t + ecx * 8] setb bl sub eax, ebx pop ebx ===================== 还是9条, 如果能想办法只用3个寄存器,则就更完美了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-5 08:34:57 | 显示全部楼层
=========================== mov eax, n bsr ecx, eax xor edx, edx cmp eax, [t + ecx * 8] setb dl mov eax, [t + ecx * 8 + 4] sub eax, edx ============================ 7条指令!!!!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-22 00:23 , Processed in 0.029347 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表