簡體   English   中英

如何使用Dev C ++檢查數學庫函數sqrt()中的代碼?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM