C++/C++11中std numeric limits的使用
在C/C++11中,std::numeric_limits為模板類,在庫編譯平臺提供基礎算術型別的極值等屬性資訊,取代傳統C語言,所採用的預處理常數。比較常用的使用是對於給定的基礎型別用來判斷在當前系統上的最大值、最小值。若使用此類,需包含<limits>標頭檔案。它支援的基礎算術型別包括如下:
min、max與C庫巨集常量的關係如下:
測試程式碼如下:
#include "numeric_limits.hpp"#include <limits>#include <iostream>///* reference: http://www.cplusplus.com/reference/limits/numeric_limits/ https://msdn.microsoft.com/en-us/library/c707ct0t.aspx*/int test_numeric_limits_1(){ std::cout << std::boolalpha; std::cout << "Minimum value for int: " << std::numeric_limits<int>::min() << std::endl; std::cout << "Maximum value for int: " << std::numeric_limits<int>::max() << std::endl; std::cout << "int is signed: " << std::numeric_limits<int>::is_signed << std::endl; std::cout << "Non-sign bits in int: " << std::numeric_limits<int>::digits << std::endl; std::cout << "int has infinity: " << std::numeric_limits<int>::has_infinity << std::endl; std::cout << "Minimum value for float: " << std::numeric_limits<float>::min() << std::endl; // min returns the smallest positive value the type can encode, not the lowest std::cout << "Lowest value for float: " << std::numeric_limits<float>::lowest() << std::endl; // the lowest value std::cout << "Maximum value for float: " << std::numeric_limits<float>::max() << std::endl; std::cout << "float is signed: " << std::numeric_limits<float>::is_signed << std::endl; std::cout << "Non-sign bits in float: " << std::numeric_limits<float>::digits << std::endl; std::cout << "float has infinity: " << std::numeric_limits<float>::has_infinity << std::endl; std::cout << "Minimum value for unsigned short: " << std::numeric_limits<unsigned short>::min() << std::endl; std::cout << "Maximum value for unsigned short: " << std::numeric_limits<unsigned short>::max() << std::endl; std::cout << "is_specialized(float): " << std::numeric_limits<float>::is_specialized << std::endl; std::cout << "is_integer(float): " << std::numeric_limits<float>::is_integer << std::endl; std::cout << "is_exact(float): " << std::numeric_limits<float>::is_exact << std::endl; std::cout << "is_bounded(float): " << std::numeric_limits<float>::is_bounded << std::endl; std::cout << "is_modulo(float): " << std::numeric_limits<float>::is_modulo << std::endl; std::cout << "is_iec559(float): " << std::numeric_limits<float>::is_iec559 << std::endl; std::cout << "digits10(float): " << std::numeric_limits<float>::digits10 << std::endl; std::cout << "radix(float): " << std::numeric_limits<float>::radix << std::endl; std::cout << "min_exponent(float): " << std::numeric_limits<float>::min_exponent << std::endl; std::cout << "max_exponent(float): " << std::numeric_limits<float>::max_exponent << std::endl; std::cout << "min_exponent10(float): " << std::numeric_limits<float>::min_exponent10 << std::endl; std::cout << "max_exponent10(float): " << std::numeric_limits<float>::max_exponent10 << std::endl; std::cout << "epsilon(float): " << std::numeric_limits<float>::epsilon() << std::endl; std::cout << "round_style(float): " << std::numeric_limits<float>::round_style << std::endl; std::cout << "The smallest nonzero denormalized value for float: " << std::numeric_limits<float>::denorm_min()<< std::endl; std::cout << "The difference between 1 and the smallest value greater than 1 for float: " << std::numeric_limits<float>::epsilon()<< std::endl; std::cout << "Whether float objects allow denormalized values: " << std::numeric_limits<float>::has_denorm << std::endl; std::cout << "Whether float objects can detect denormalized loss: " << std::numeric_limits<float>::has_denorm_loss << std::endl; std::cout << "Whether float objects have quiet_NaN: " << std::numeric_limits<float>::has_quiet_NaN << std::endl; std::cout << "Whether float objects have a signaling_NaN: " << std::numeric_limits<float>::has_signaling_NaN << std::endl; std::cout << "The base for type float is: " << std::numeric_limits<float>::radix << std::endl; std::cout << "The maximum rounding error for type float is: " << std::numeric_limits<float>::round_error() << std::endl; std::cout << "The rounding style for a double type is: " << std::numeric_limits<double>::round_style << std::endl; std::cout << "The signaling NaN for type float is: " << std::numeric_limits<float>::signaling_NaN() << std::endl; std::cout << "Whether float types can detect tinyness before rounding: " << std::numeric_limits<float>::tinyness_before << std::endl; std::cout << "Whether float types have implemented trapping: " << std::numeric_limits<float>::traps << std::endl; return 0;}
在windows10 64位上執行結果如下:
再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow
相關文章
- std::numeric_limits::max() std::numeric_limits::min()編譯錯誤MIT編譯
- C++中std::allocator的使用C++
- c++11:std::boolalpha、std::noboolalphaC++
- c++11:std::bindC++
- C++11 std::bind std::function 高階用法C++Function
- c++11:std::is_sameC++
- C++ 標準庫 std::set std::multiset swap()的使用C++
- C++11中std::move、std::forward、左右值引用、移動建構函式的測試C++Forward函式
- C++11 執行緒同步介面std::condition_variable和std::future的簡單使用C++執行緒
- C++,std::shared_future的使用C++
- 透徹理解C++11新特性:右值引用、std::move、std::forwardC++Forward
- C++(std::vector)C++
- (C++11/14/17學習筆記):std::atomic續、std::async與std::thread對比C++筆記thread
- C++ 中的lambda表示式【C++11版本】C++
- C/C++——求下面資料型別的最大值和最小值: char, short, int, long, float, double, long double和numeric_limits使用C++資料型別MIT
- c++ std::vector 切記C++
- C++11中unique_ptr的使用C++
- 【C++併發實戰】(三) std::future和std::promiseC++Promise
- 解決 /kaldi-trunk/tools 目錄下make安裝報錯需要支援 ISO C++ 2011 -std=c++11 or -std=gnu++11C++
- C++(std::cout 處理 char*)C++
- C++開發者都應該使用的10個C++11特性C++
- std::async的使用總結
- C++11併發程式設計:多執行緒std::threadC++程式設計執行緒thread
- C++中檔案開頭寫的 using namespace std 有什麼作用?C++namespace
- 請問golang 中是否有內建的可排序容器,比如類似c++中的std::vector?Golang排序C++
- 【C/C++】C和C++11之enum列舉的使用細節C++
- 每個C++開發者都應該使用的十個C++11特性C++
- c++11 執行緒間同步---利用std::condition_variable實現C++執行緒
- C++ 智慧指標詳解: std::unique_ptr 和 std::shared_ptrC++指標
- c++中關於智慧指標std::tr1::shared_ptr的用法C++指標
- C++11中的函式C++函式
- (不要)使用std::threadthread
- C++中extern的使用C++
- std::reserve和std::resize的區別
- c++11 中的 move 與 forwardC++Forward
- C++11中的右值引用C++
- C++霧中風景17:模板的非推斷語境與std::type_identityC++IDE
- 【譯】對Rust中的std::io::Error的研究RustError