簡體   English   中英

C ++中雙變量的逼近

[英]Approximation of double variables in C++

我正在嘗試運行該程序,在其中插入兩個雙精度值,然后返回兩個數字中哪個較大,如果兩個雙精度值相同,則顯示“數字相等”的消息,如果兩個數字之間的差小於1 / 10.000.000,則顯示“數字幾乎相等”消息。

我寫的代碼是這樣的:

    #include "stdafx.h"
    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    inline void keep_window_open() { char ch; cin >> ch; }

    double square(double x)
    {
        return x * x;
    }

    int main() {
        double number;
        double number2;
        while (cin >> number, cin >> number2) {
            if (number == '|' || number2 == '|') break;
            else {
                cout << number << " " << number2 << endl;
                if (number > number2) cout << number << " is bigger than " << number2 << endl;
                if (number < number2) cout << number2 << " is bigger than " << number << endl;
                double difference = number - number2;
                if (difference > - 1/10000000 && difference < 0) cout << "the numbers are almost equal" << endl;
                if (difference < 1 / 10000000 && difference > 0) cout << "the numbers are almost equal" << endl;
                if (number == number2) cout << "the numbers are equal" << endl;
            }

        }
    }

當我運行該程序並插入兩個數字,其差值小於1 / 10.000.000時,該程序應返回“數字幾乎相等”,但事實並非如此。

這就是我插入“ 1”和“ 1.0000000000001”時返回的結果(當我運行程序並插入兩個數字時):

    "1 1.0000000000001

    1 1

    1 is bigger than 1"

我不明白為什么程序會考慮我插入的兩個數字為1,並返回“ 1”和“ 1”作為值。

自從我寫道:它還應該給出“數字幾乎相等”的回報:

     if (difference > - 1/10000000 && difference < 0) cout << "the numbers are almost equal" << endl;
                        if (difference < 1 / 10000000 && difference > 0) cout << "the numbers are almost equal" << endl;

但事實並非如此。

當我插入兩個小於1 / 10.0000.000的雙精度值(例如“ 1”和“ 1.0000000000001”)時,如何使程序返回“數字幾乎相等”?

當您嘗試打印雙精度值時,cout會四舍五入。 這里

對於您的代碼,整數除法(1/10000000)將始終返回整數,因此您需要執行雙精度或十進制值的除法(1.0 / 10000000.0)

這是一個工作代碼,對邏輯做了一些小的更改

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
inline void keep_window_open() { char ch; cin >> ch; }

double square(double x)
{
    return x * x;
}

int main() {
    double number;
    double number2;
    while (cin >> number, cin >> number2) {
        if (number == '|' || number2 == '|') break;
        else {
            cout.precision(15);
            cout << number << " " << number2 << endl;
            double difference = number - number2;
            if (difference > - 1/10000000.0 && difference < 0) cout << "the numbers are almost equal" << endl;
            else if (difference < 1/10000000.0 && difference > 0) cout << "the numbers are almost equal" << endl;
            else if (number == number2) cout << "the numbers are equal" << endl;
            else if (number > number2) cout << number << " is bigger than " << number2 << endl;
            else if (number < number2) cout << number2 << " is bigger than " << number << endl;
        }

    }
}

暫無
暫無

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

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