![](/img/trans.png)
[英]Rational approximation of double using int numerator and denominator in 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.