[問題] 新手又印不出需要的結果again

看板C_and_CPP作者 (fireslayer)時間15年前 (2010/03/15 22:45), 編輯推噓2(208)
留言10則, 4人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 都印出0........ 希望得到的正確結果: 兩點距離 程式跑出來的錯誤結果: 0 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Microsoft Visual Studio 2010 Release Canditate 有問題的code: (請善用置底文標色功能) // 計算兩點距離.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "stdlib.h" #include "math.h" int distance(double x1, double y1, double z1, double x2, double y2, double z2); int distance(double x1, double y1, double z1, double x2, double y2, double z2) { return sqrt( pow(x1-x2,2) + pow(y1-y2,2) + pow(z1-z2,2)); } int _tmain(int argc, _TCHAR* argv[]) { double xi1; double yi1; double zi1; double xi2; double yi2; double zi2; printf("計算兩點距離<三維>\n"); printf("請輸入第一個點:"); scanf_s("%lf%lf%lf",&xi1 ,&yi1 ,&zi1); printf("請輸入第二個點:"); scanf_s("%lf%lf%lf",&xi2 ,&yi2 ,&zi2); printf("兩點距離為%lf\n",distance(xi1, yi1, zi1, xi2, yi2, zi2)); system("pause"); return 0; } 補充說明: 先謝謝大家<我自己都覺得我問題有點多= =是新手的關係嗎?> debugger沒有問題,變數也吃進去了,應該是distance函式裡面的問題,可是我 不知道在哪 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.40.80

03/15 22:50, , 1F
distance return type int改double吧
03/15 22:50, 1F

03/15 22:51, , 2F
還是少用pow吧,因為總是會出現怪怪的問題...
03/15 22:51, 2F

03/15 22:56, , 3F
喔喔....原來前面的那個也有差喔~~
03/15 22:56, 3F

03/15 22:56, , 4F
謝謝jhchou大
03/15 22:56, 4F

03/15 23:03, , 5F
請問大大pow會出現什麼樣的問題?
03/15 23:03, 5F

03/15 23:03, , 6F
小弟以後可以多加注意.......
03/15 23:03, 6F

03/15 23:10, , 7F
我記得是浮點數誤差的樣子= =
03/15 23:10, 7F

03/15 23:18, , 8F
基本上就是有誤差, 因為記得pow是用一些數值方法來求值
03/15 23:18, 8F

03/15 23:19, , 9F
的, 當然浮點數運算與儲存的精確度問題也是存在的:)
03/15 23:19, 9F

03/15 23:26, , 10F
解ACM時常常掛在這誤差之中= =
03/15 23:26, 10F
文章代碼(AID): #1BdaWE1c (C_and_CPP)