[英]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.