開發平台(Platform): (Ex: Win10, Linux, ...)
WinXP
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
VS2005
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
Math.h
問題(Question):
sqrt錯誤
餵入的資料(Input):
25.0
預期的正確結果(Expected Output):
5.0
錯誤結果(Wrong Output):
1077478015.000000
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
目前在一個Lib內新建一些函式及功能,因為跟預期值不一樣所以進偵錯模式看
發現如果直接用A = sqrt(B),A的值會錯掉
例如會得到sqrt(25.0)=1077478015.000000
但如果在外部把sqrt包過一層再呼叫數值就對了
例如
double my_sqrt(double input)
{
return sqrt(input);
}
這時候my_sqrt(25.0)=5.0
補充說明(Supplement):
這個系統在dos版本上,主流程使用的sqrt是系統內建的
中斷使用的sqrt是用組語另外寫的,問過主管說是為了避免一些stack混用的問題
但目前在windows平台上,不管在中斷還是主流程用的都是math.h的sqrt
我不能理解直接呼叫sqrt跟再包過一層有什麼差別?
基本上有關於浮點數內部計算都是用double