这是sqrt函数中的一个错误(is this a bug in sqrt function)
我创建了一个应用程序来计算64位范围内的素数,所以当我尝试使用
math.h
sqrt
函数来计算64位数的sqrt
,我发现答案不准确,例如当输入~0ull
答案应该是~0u
但我得到的是0x100000000
这是不正确的,所以我决定使用汇编x86语言创建我自己的版本,看看这是否是一个错误,这里是我的功能:inline unsigned prime_isqrt(unsigned long long value) { const unsigned one = 1; const unsigned two = 2; __asm { test dword ptr [value+4], 0x80000000 jz ZERO mov eax, dword ptr [value] mov ecx, dword ptr [value + 4] shrd eax, ecx, 1 shr ecx, 1 mov dword ptr [value],eax mov dword ptr [value+4],ecx fild value fimul two fiadd one jmp REST ZERO: fild value REST: fsqrt fisttp value mov eax, dword ptr [value] } }
输入是一个奇数来得到它的平方根。 当我测试我的功能相同的输入结果是一样的。
我没有得到的是为什么这些函数围绕结果或具体为什么
sqrt
指令围绕结果?I create an application to compute the primes numbers in 64-bit range so when i tried to compute the square root of 64-bit number using
sqrt
function frommath.h
i found the answer is not accurate for example when the input is~0ull
the answer should be~0u
but the one I get is0x100000000
which is not right, so i decided to create my own version using assembly x86 language to see if this is a bug, here is my function:inline unsigned prime_isqrt(unsigned long long value) { const unsigned one = 1; const unsigned two = 2; __asm { test dword ptr [value+4], 0x80000000 jz ZERO mov eax, dword ptr [value] mov ecx, dword ptr [value + 4] shrd eax, ecx, 1 shr ecx, 1 mov dword ptr [value],eax mov dword ptr [value+4],ecx fild value fimul two fiadd one jmp REST ZERO: fild value REST: fsqrt fisttp value mov eax, dword ptr [value] } }
the input is an odd number to get its square root. When i test my function with same input the result was the same.
What i don't get is why those functions round the result or to be specific why
sqrt
instruction round the result?
原文:https://stackoverflow.com/questions/10815783
最满意答案
尝试改变:
<select name="foo" onchange="bar();"> <!-- etc. -->
Try onchange:
<select name="foo" onchange="bar();"> <!-- etc. -->
相关问答
更多-
这是一个解决方法。 可以帮助你。 HTML(作为占位符的空option ) JavaScript的 var clickCount = 0; $("select").click(function(e) { if (clickCount ...
-
尝试改变:
-
下拉列表中的OnClick()事件(OnClick() event in dropdown)[2023-11-07]
最好在选择框中使用onchange事件。 Onclick在所有浏览器中都不能正常工作。 将javascript函数绑定到onchange事件,该事件更改a元素的url(如果要立即更改,则重定向到正确的url)。 这样的事情应该有效。 如果你想做更多的交互式客户端功能,我建议使用像jquery这样的javascript库 改变语言()