[英]Translate math formula to C++
我需要編寫一個公式來確定 C++ 平面中兩點之間的距離。 ###這是公式:
我為此編寫了這樣的代碼,但是我的錯誤在哪里,我應該如何正確編寫代碼?:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double x1, x2, y1, y2, distance;
distance = sqrt((pow(x2-x1), 2) + pow((y2-y1), 2));
return 0;
}
在 IEEE754(桌面個人計算機上普遍存在的浮點標准)下, std::sqrt
需要返回可能的最佳可表示結果,但std::pow
不是。
所以
distance = std::sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
是更好的方法。 確保在評估之前初始化所有域變量,否則程序的行為是未定義的。
為了使您的程序具有可觀察的 output,請編寫
std::cout << distance;
為x1
、 x2
、 y1
和y2
提供了適當的值。
您問題中的具體示例有幾個嚴重的錯誤-除其他外,您有語法錯誤(錯誤位置的括號導致第一個pow
只有一個參數)並且您使用的是從未初始化過的變量 - 然后甚至沒有打印或返回結果......
稍作修正,您使用的公式是正確的:
sqrt(pow((x2-x1), 2) + pow((y2-y1), 2))
正如 Bathsheba 所指出的,如果您想對一個數字求平方,那么調用 pow() 的更快、更准確的替代方法就是進行乘法運算:
sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))
另一種選擇是將sqrt
和兩個乘法替換為一個數學 function, hypot
,旨在完全滿足您的需求:
hypot(x2-x1, y2-y1)
陪審團仍然沒有上述兩種選擇中的哪一種更好。 hypot
具有更准確的潛力並且還能夠在溢出中幸存(當距離平方溢出浮點限制但距離本身沒有時),但有人報告說它比 sqrt-and-multiplication 版本慢(請參閱何時使用 `std::hypot(x,y)` 而不是 `std::sqrt(x*x + y*y)` )。
我對此進行了測試。 下面的代碼工作正常
#include <iostream>
#include <math.h>
using namespace std;
double calculateDistance(double x1, double x2, double y1, double y2) {
return sqrt(pow((x2 - x1), 2) + pow((y2 - y1), 2));
}
int main() {
double x1 = 5, x2 = 3, y1 = 5, y2 = 4;
double distance = calculateDistance(x1, x2, y1, y2);
cout << distance;
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.