Я пытаюсь запустить эту программу, в которой вы вставляете два двойных значения и получаете взамен, какое из двух чисел больше, сообщение «числа равны», если значения двух двойных одинаковы, и сообщение «числа почти равны», если разница между двумя числами меньше 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.000.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;
}
}
}
Других решений пока нет …