[問題] C sqrt()錯誤
開發平台(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
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.76.65.68
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1527133375.A.238.html
→
05/24 11:52,
6年前
, 1F
05/24 11:52, 1F
→
05/24 11:59,
6年前
, 2F
05/24 11:59, 2F
→
05/24 12:02,
6年前
, 3F
05/24 12:02, 3F
→
05/24 12:38,
6年前
, 4F
05/24 12:38, 4F
→
05/24 14:46,
6年前
, 5F
05/24 14:46, 5F
→
05/24 14:46,
6年前
, 6F
05/24 14:46, 6F
推
05/24 15:12,
6年前
, 7F
05/24 15:12, 7F
→
05/24 15:21,
6年前
, 8F
05/24 15:21, 8F
→
05/24 15:22,
6年前
, 9F
05/24 15:22, 9F
→
05/24 15:22,
6年前
, 10F
05/24 15:22, 10F
→
05/24 15:23,
6年前
, 11F
05/24 15:23, 11F
→
05/24 15:39,
6年前
, 12F
05/24 15:39, 12F
→
05/24 15:39,
6年前
, 13F
05/24 15:39, 13F
→
05/24 15:39,
6年前
, 14F
05/24 15:39, 14F
→
05/24 15:58,
6年前
, 15F
05/24 15:58, 15F
→
05/24 15:59,
6年前
, 16F
05/24 15:59, 16F
→
05/24 15:59,
6年前
, 17F
05/24 15:59, 17F
→
05/24 16:06,
6年前
, 18F
05/24 16:06, 18F
→
05/24 16:10,
6年前
, 19F
05/24 16:10, 19F
→
05/24 16:10,
6年前
, 20F
05/24 16:10, 20F
→
05/24 16:13,
6年前
, 21F
05/24 16:13, 21F
推
05/24 18:31,
6年前
, 22F
05/24 18:31, 22F
→
05/24 20:32,
6年前
, 23F
05/24 20:32, 23F
→
05/24 20:36,
6年前
, 24F
05/24 20:36, 24F
※ 編輯: Kayusumi (203.133.119.129), 05/24/2018 21:18:14
→
05/25 00:39,
6年前
, 25F
05/25 00:39, 25F
推
05/25 13:44,
6年前
, 26F
05/25 13:44, 26F
→
05/25 13:46,
6年前
, 27F
05/25 13:46, 27F
→
05/25 13:48,
6年前
, 28F
05/25 13:48, 28F
→
05/25 13:50,
6年前
, 29F
05/25 13:50, 29F
→
05/25 20:09,
6年前
, 30F
05/25 20:09, 30F
→
05/26 11:36,
6年前
, 31F
05/26 11:36, 31F
→
05/26 12:36,
6年前
, 32F
05/26 12:36, 32F
→
05/26 12:36,
6年前
, 33F
05/26 12:36, 33F
→
05/26 13:47,
6年前
, 34F
05/26 13:47, 34F
→
05/26 15:30,
6年前
, 35F
05/26 15:30, 35F
→
05/26 15:30,
6年前
, 36F
05/26 15:30, 36F
→
05/26 15:34,
6年前
, 37F
05/26 15:34, 37F
→
05/26 18:09,
6年前
, 38F
05/26 18:09, 38F
→
05/26 18:11,
6年前
, 39F
05/26 18:11, 39F
→
05/26 18:11,
6年前
, 40F
05/26 18:11, 40F
→
05/26 18:13,
6年前
, 41F
05/26 18:13, 41F
→
05/26 18:13,
6年前
, 42F
05/26 18:13, 42F
→
05/26 18:14,
6年前
, 43F
05/26 18:14, 43F
→
05/26 19:46,
6年前
, 44F
05/26 19:46, 44F
→
05/26 19:46,
6年前
, 45F
05/26 19:46, 45F