簡體   English   中英

將數學公式轉換為 C++

[英]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;

x1x2y1y2提供了適當的值。

您問題中的具體示例有幾個嚴重的錯誤-除其他外,您有語法錯誤(錯誤位置的括號導致第一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM