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

[擂台] 整数开根号果真慢过浮点?

[复制链接]
 楼主| 发表于 2014-7-3 19:26:36 | 显示全部楼层
liangbch 发表于 2014-7-3 13:21
这又什么难以理解的?
  cvtsi2sd 要求源操作数是带符号数,故当操作数>=$2^31$, cvtsi2sd不能按预期的 ...
  1. __declspec(naked)
  2. DWORD __fastcall iSqrt_SSE41(DWORD n)
  3. {
  4. __asm
  5. {
  6. mov eax, ecx
  7. and eax, 0x80000000
  8. movd xmm0, eax
  9.     psllq xmm0, 32
  10. mov eax, 0
  11. cvtsi2sd xmm1, eax
  12. movsd xmm2, qword ptr [b32]
  13. blendvpd xmm1, xmm2, xmm0
  14.     cvtsi2sd xmm0, ecx
  15. addsd xmm0, xmm1
  16. sqrtsd xmm0, xmm0
  17. cvttsd2si eax, xmm0
  18. ret
  19. }
  20. }
复制代码
  1.         mov eax, ecx
  2.         and eax, 0x80000000
  3.         shr eax, 31
  4.         movsd xmm1, qword ptr [b32 + eax * 8]
  5.         cvtsi2sd xmm0, ecx
  6.         addsd xmm0, xmm1
  7.         sqrtsd xmm0, xmm0
  8.         cvttsd2si eax, xmm0
  9.         ret
复制代码
  1. push ecx
  2. fld qword ptr [b32]
  3. fldz   
  4. cmp ecx, 0x8000000
  5. fcmovnb st, st(1)
  6. fild dword ptr [esp]
  7. faddp  st(1),st
  8. fsqrt
  9. fadd  qword ptr [zero5]
  10. fistp  dword ptr [esp]
  11. fstp  st
  12. pop eax
  13. ret
复制代码





但为什么用2^53实测不行
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-11-21 20:38 , Processed in 0.020107 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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