簡體   English   中英

用C ++進行符號計算

[英]Sign calculation in c++

我正在嘗試將緯度和經度從度,分,秒轉換為十進制度數。 我已經正確轉換了數字,但是在轉換符號時遇到了麻煩。 當我輸入數字39 57 21表示緯度,輸入-75 11 14表示經度時,它可以正確轉換為(39.9558,75.1872),但是我的符號計算公式無法正常工作。 我已經用細齒梳檢查了代碼,但似乎無法在公式中找到錯誤。 我找到它的公式是:sign =(2x)/(abs(x)+1)。 我在下面包含了我的代碼。 任何幫助將不勝感激。

#include <iomanip>
#include <cmath>
#include <iostream>
#include <string>
using namespace std;

int main()
{
    int user_degrees_latitude, user_minutes_latitude, user_seconds_latitude,
        user_degrees_longitude, user_minutes_longitude, user_seconds_longitude,
        sign_latitude, sign_longitude;
    double total_minutes_latitude, total_degrees_latitude,
        total_minutes_longitude, total_degrees_longitude, final_latitude,
        final_longitude;
    const double sixtieth = (1. / 60);

    cout << "Input latitude in degrees, minutes, seconds:";
    cin >> user_degrees_latitude >> user_minutes_latitude >>
        user_seconds_latitude;

    cout << "Input longitude in degrees, minutes, seconds:";
    cin >> user_degrees_longitude >> user_minutes_longitude >>
        user_seconds_longitude;

    total_minutes_latitude =
        (user_minutes_latitude + ((sixtieth) * user_seconds_latitude));
    total_degrees_latitude =
        (abs(user_degrees_latitude) + ((sixtieth) * total_minutes_latitude));

    total_minutes_longitude =
        (user_minutes_longitude + ((sixtieth) * user_seconds_longitude));
    total_degrees_longitude =
        (abs(user_degrees_longitude) + ((sixtieth) * total_minutes_longitude));

    sign_latitude =
        (2 * (total_degrees_latitude)) / ((abs(total_degrees_latitude)) + 1);
    sign_longitude =
        (2 * (total_degrees_longitude)) / ((abs(total_degrees_longitude)) + 1);

    final_latitude = (sign_latitude * total_degrees_latitude);
    final_longitude = (sign_longitude * total_degrees_longitude);

    cout << user_degrees_latitude << " deg " << user_minutes_latitude << "\' "
         << user_seconds_latitude << "\" latitude, " << user_degrees_longitude
         << " deg " << user_minutes_longitude << "\' " << user_seconds_longitude
         << "\"";
    cout << " is (" << total_degrees_latitude << "," << total_degrees_longitude
         << ")" << endl;

    return 0;
}

首先,嘗試使用更好的函數來計算符號,例如:

double sign(double x) {return (x < 0) ? -1 : 1;}

其次,由於只有變量user_degrees_latitudeuser_degrees_longitude將變為負數,因此,只有在具有幅度時,才應使用變量來最后計算符號。

sign_latitude  = sign(user_degrees_latitude);
sign_longitude = sign(user_degrees_longitude);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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