c++数据类型及其表示方式



我一直在使用巴比伦平方根算法,这是我在编程课程介绍中的一项作业。该程序运行良好,并给出相当准确的答案。我的问题源于行中发生的一些奇怪的事情(而guess != result)我写while语句是为了检查这两项,一旦它们相等,就终止循环。但是,如果您输入50作为起始数字,循环将在爆发之前检查两个相同的数字三次,而不是一次。这是因为有更多的数字在后台处理,双数据类型不能显示吗?我知道double可以到小数点后15位。我希望我的措辞是可以理解的,如果有人需要澄清就问。PS-如果有人有提示,以帮助使我的代码更干净,请让我知道,我正在努力学习如何格式化我的代码是尽可能可读的。

#include <iostream>
using namespace std;
int main()
{
    double input,       // Users number
           guess = 2,   // First guess, always 2 at beginning
           result,      // altered guess, becomes guess 1 when repeated
           r;           // input divided by guess
    int steps = 1,      // keeps track of step number, for debugging
        loop = 1;       // controls continue loop
    string error_1 = " Warning: input is negative, please pick a new one";
    while (loop == 1)
    {
        cout << "--Babylonian Square Root Algorithm--" << endl;
        cout << "Type a positive number to find its square root: ";
        cin >> input;
        if (input >= 0)
        {
            while (guess != result) // test here for within 1%
            {
                r = input / guess;
                result = (guess + r) / 2;
                // DEBUG
                cout << "-------" << endl;
                cout << " Step # " << steps << endl;
                cout << "-------" << endl;
                cout << " R) " << r << endl;
                cout << " Guess) " << guess << endl;
                cout << " Result) " << result << endl;
                steps++;
                guess = result;
                result = (guess + r) / 2;
                cout << result << " is the approximate square root of " << input << endl;
                //DEBUG
                cout << " Steps required: " << steps - 1 << endl;
            }
            else
            {
                cout << error_1 << endl;
            }
            cout << "Continue?  (Yes = 1, No = 0)" << endl;
            guess = 2;
            result = 0;
            steps = 1;
            cin >> loop;
            cout << "------------------------------------------------------" << endl;
        }
        return 0;
    }
}

"guess"one_answers"result"是"double"类型,它具有比默认cout浮点数显示长度更高的精度。

你认为这些数字是相同的,但它们不是。从小数点往远处看,你就能看到差别。

解决方案1:将cout十进制数字显示范围更改为更长的值,以便您可以看到数字实际上是不同的,因此while循环不会中断。在代码开头使用cout.precision(17);

解决方案二:更改guess &

最新更新