簡體   English   中英

編程:原理與實踐使用C ++第4章鑽取第6步:關於數值范圍的一般問題

[英]Programming: Principles and Practice Using C++ chapter 4 drill step 6 : General question about numeric range

我想提示用戶一些double,然后存儲最小和最大值,然后打印文本。 這是我到目前為止的代碼:

#include <iostream>
#include <string>
#include <cmath>
#include <vector>

using namespace std;


int main()
{       
    double min = 1000000000; // Here is my issue !
    double max = -100000000; // Here is my issue !
    for (double input; cin >> input;)
    {
        if (input == '|')
            return 0;
        else if (input < min)
        {
            min = input;
            cout << "The smallest so far\n";
        }
        else if (input > max)
        {
            max = input;
            cout << "The largest so far\n";
        }
        else
            cout << "\n";
    }
}    

所以我的代碼工作正常,做我想要的,但我有一個問題是如何處理雙min和max。 我必須給他們一個值來讓我的程序工作,但給他們一個值來影響用戶。 如果我沒有將它們設置為高或低,則用戶可能輸入不觸發程序的值。 所以我將它們設置為任意高/低數字。 但我想知道是否有更好的解決方案。

如果我沒有將它們設置為高或低,則用戶可能輸入不觸發程序的值。

正確。

但我想知道是否有更好的解決方案。

有!

1000000000可能還不夠。 您可能對數字限制感興趣。 你想要的是:

double min = std::numeric_limits<double>::max();
double max = std::numeric_limits<double>::lowest();

它將兩個值分別設置為最大和最小可表示的double精度值。

不要忘記#include <limits>

我來不及回答這個問題,但是我想引起你的注意,在你的情況下,你必須使用lowest()不是 min()

double min = std::numeric_limits<double>::max();
double max = std::numeric_limits<double>::lowest();  // <-- Attention, not min

使用min()而不是lowest()是一個常見的錯誤(是的,這個名稱具有誤導性)

cppreference

lowest() [靜態](C ++ 11)返回給定類型的最低有限值(公共靜態成員函數)

min() [靜態]返回給定類型的最小有限值(公共靜態成員函數)

std::cout << std::numeric_limits<double>::min();
std::cout << std::numeric_limits<double>::lowest();

打印:

2.22507e-308    <-- min    : smallest value
-1.79769e+308   <-- lowest : is what you need in your case

暫無
暫無

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

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