看板 C_and_CPP 關於我們 聯絡資訊
( *[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
jhchou:distance return type int改double吧 03/15 22:50
charlie0228:還是少用pow吧,因為總是會出現怪怪的問題... 03/15 22:51
fireslayer:喔喔....原來前面的那個也有差喔~~ 03/15 22:56
fireslayer:謝謝jhchou大 03/15 22:56
fireslayer:請問大大pow會出現什麼樣的問題? 03/15 23:03
fireslayer:小弟以後可以多加注意....... 03/15 23:03
charlie0228:我記得是浮點數誤差的樣子= = 03/15 23:10
VictorTom:基本上就是有誤差, 因為記得pow是用一些數值方法來求值 03/15 23:18
VictorTom:的, 當然浮點數運算與儲存的精確度問題也是存在的:) 03/15 23:19
charlie0228:解ACM時常常掛在這誤差之中= = 03/15 23:26