C 中双变量的近似值

Approximation of double variables in C++

本文关键字:近似值 变量      更新时间:2023-10-16

我正在尝试运行此程序,其中您插入两个双重值,然后获得两个数字中的哪一个,如果是,则"数字相等",如果两个双的值是相同的,如果两个数字之间的差小于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"answers" 1.0000000000001":

    "1 1.0000000000001
    1 1
    1 is bigger than 1"

我不明白为什么该程序认为我插入1的两个数字,然后返回" 1"answers" 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.000.000(例如" 1"answers" 1.0000000000001"(?

当您尝试打印它们时,可以从这样的双重值中转。请参阅此处

至于您的代码,整数部门(1/10000000(将始终返回整数,因此您需要执行双重或小数值(1.0/1000000000.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;
        }
    }
}