[英]How to check code inside math library function sqrt() using Dev C++?
我想檢查數學庫函數 sqrt()
代碼,怎么可能?
我正在使用DEV C ++。
這些東西被編譯到工具鏈運行時中,但是由於GCC及其Windows端口MinGW(這是您的Dev-C ++ IDE調用的)是開源的,因此您只需看一下它的源碼即可。
這是最新的MinGW GCC; 這兩個版本似乎基本上將所有工作推遲到了處理器上(這並不奇怪,因為x86-通過指令集的x87部分- 本地支持平方根計算 )。
long double
值 #include <math.h>
#include <errno.h>
extern long double __QNANL;
long double
sqrtl (long double x)
{
if (x < 0.0L )
{
errno = EDOM;
return __QNANL;
}
else
{
long double res;
asm ("fsqrt" : "=t" (res) : "0" (x));
return res;
}
}
float
值 #include <math.h>
#include <errno.h>
extern float __QNANF;
float
sqrtf (float x)
{
if (x < 0.0F )
{
errno = EDOM;
return __QNANF;
}
else
{
float res;
asm ("fsqrt" : "=t" (res) : "0" (x));
return res;
}
}
平方根由處理器的浮點數計算得出,因此那里沒有太多要學習的C ++ ...
編輯:
x86指令
http://en.wikipedia.org/wiki/X86_instruction_listings
http://en.wikipedia.org/wiki/X87
FSQRT-平方根
甚至回想起來:en.wikipedia.org/wiki/8087
如果sqrt()
沒有源代碼,則可以隨時對其進行反匯編。 檢查代碼將是檢查的一種類型。
您還可以為sqrt()
編寫測試。 那將是另一種檢查方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.