C++學習之C++中`std::numeric_limits`的`min()`, `max()`和`lowest()`的區別

C++中std::numeric_limitsmin(), max()lowest()的區別

std::numeric_limits是C++標準庫中用于查詢數值類型特性的模板類,其中min(), max()lowest()這三個方法經常被混淆。下面詳細解釋它們的區別:

1. 基本區別

方法整數類型浮點類型說明
min()該類型的最小正值(1)最小的正正規化值對于整數是最小值,對于浮點是最小正數
max()該類型的最大值最大的有限值兩者行為一致
lowest()min() (C++11起)最小的有限值(最負的值)C++11引入

2. 詳細解釋

對于整數類型 (int, long等)

std::numeric_limits<int>::min();// 最小負值 (如-2147483648)
std::numeric_limits<int>::max();// 最大正值 (如2147483647)
std::numeric_limits<int>::lowest(); // 同min() (C++11起)
  • min()lowest()返回相同值 - 該整數類型能表示的最小值
  • max()返回該整數類型能表示的最大值

對于浮點類型 (float, double等)

std::numeric_limits<float>::min();// 最小正正規化值 (~1.17549e-38)
std::numeric_limits<float>::max();// 最大有限值 (~3.40282e+38)
std::numeric_limits<float>::lowest(); // 最小有限值 (~-3.40282e+38)
  • min()返回最小的正正規化值(大于零的最小值)
  • max()返回最大的有限值
  • lowest()返回最小的有限值(最負的值)

3. 示例代碼

#include <iostream>
#include <limits>template<typename T>
void print_limits(const char* type_name) {
std::cout << type_name << ":\n";
std::cout << "min():" << std::numeric_limits<T>::min() << "\n";
std::cout << "max():" << std::numeric_limits<T>::max() << "\n";
std::cout << "lowest(): " << std::numeric_limits<T>::lowest() << "\n";
std::cout << std::endl;
}int main() {
print_limits<int>("int");
print_limits<float>("float");
print_limits<double>("double");
return 0;
}

典型輸出:

int:
min():-2147483648
max():2147483647
lowest(): -2147483648float:
min():1.17549e-38
max():3.40282e+38
lowest(): -3.40282e+38double:
min():2.22507e-308
max():1.79769e+308
lowest(): -1.79769e+308

4. 為什么有這樣的設計?

  1. 歷史原因
  • min()在早期C++中的行為對整數和浮點類型不一致
  • C++11引入lowest()來解決這種不一致性
  1. 浮點數的特殊性
  • 浮點數有正負范圍不對稱的特性
  • 需要區分"最小正值"和"最小負值"
  1. 兼容性考慮
  • 保持min()的原有行為以避免破壞現有代碼
  • 添加lowest()提供更直觀的最小值查詢

5. 使用建議

  • 查詢整數最小值:使用min()lowest()(C++11后)
  • 查詢浮點數最小負值:使用lowest()
  • 查詢浮點數最小正值:使用min()
  • 查詢任何類型的最大值:使用max()

在C++11及以后版本中,對于所有數值類型,lowest()都返回該類型能表示的最小值(最負的值),是最一致的選擇。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88522.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88522.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88522.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nginx(筆記)

配置高可用集群 &#x1f9f1; Nginx 高可用架構圖&#xff08;主流方案&#xff09;??客戶端請求┌───────────────┐│ Virtual IP │ ← Keepalived 提供高可用浮動IP└──────┬────────┘│┌──────────┴─────────…

聊聊AI大模型的上下文工程(Context Engineering)

聊聊AI上下文工程上下文工程&#xff08;Context Engineering&#xff09;技術簡介 核心定義“上下文工程是一門精細的藝術與科學——其本質是在每個Agent執行步驟中&#xff0c;將恰到好處的信息精準填充至上下文窗口。” —— Andrej Karpathy&#xff08;前特斯拉AI總監&…

searxng 對接openweb-UI實現大模型通過國內搜索引擎在線搜索

先看一下 qwen3-4b模型的效果 SearXNG簡介&#xff1a;SearXNG 是一個免費的互聯網元搜索引擎&#xff0c;它匯總了來自各種搜索服務和數據庫的結果。用戶既不會被跟蹤&#xff0c;也不會被分析。 官方項目&#xff1a;https://github.com/searxng/searxng-docker 項目文檔&a…

巨人網絡持續加強AI工業化管線,Lovart國內版有望協同互補

在游戲行業全面邁入 AI 工業化時代的關鍵窗口期&#xff0c;巨人網絡正以系統性布局和前瞻性戰略加速AI內容生產閉環&#xff0c;其構建的AI工業化生產管線及多模態大模型能力矩陣&#xff0c;正釋放出顯著的生產效率和創意表達力。公司內部數據顯示&#xff0c;自研AI代碼生成…

TypeScript---class類型

一.簡介 TypeScript 完全支持 ES2015 中引入的 class 關鍵字。 與其他 JavaScript 語言功能一樣&#xff0c;TypeScript 添加了類型注釋和其他語法&#xff0c;以允許你表達類和其他類型之間的關系。 1.字段 (1).在申明時同時給出類型 class Person {name: string;age: nu…

vue3中實現echarts打印功能

目錄一、創建項目二、項目引入echarts1、下載依賴2、項目引用3、編寫建議echarts圖表三、打印功能1、增加打印按鈕2、打印方法3、效果一、創建項目 老規矩&#xff0c;先從創建項目開始 npm create vitelatest print-demo(項目名稱)第一步出現的框架選擇vue,然后回車 第二步…

今日行情明日機會——20250711

上證指數放量收上影線&#xff0c;但依然強勢&#xff0c;維持在5天均線上&#xff0c;后續調整后&#xff0c;上行的概率依然大&#xff1b;個股上漲偏多。深證指數緩慢上漲&#xff0c;已經突破下跌趨勢線&#xff0c;目前依舊沿著5日線上行&#xff0c;后市依然值得期待。20…

「日拱一碼」024 機器學習——防止過擬合

目錄 數據層面 數據增強 數據正則化 ?數據采樣 模型結構層面 簡化模型 添加正則化層 早停法&#xff08;Early Stopping&#xff09; 訓練過程層面 使用交叉驗證 使用集成學習 調整學習率 防止過擬合是機器學習中一個非常重要的問題&#xff0c;它可以幫助模型在新…

持有對象-泛型和類型安全的容器

我們需要管理一批對象序列&#xff0c;但是又對實際運行的時候的對象類型和對象序列長度不確定的時候&#xff0c;用簡單的對象引用無法滿足&#xff0c;java有ArrayList,Map,Set等這些容器類提供&#xff0c;這些都實現了Collections接口&#xff0c;所以都屬于Collections類。…

《財稅企業經營管理秘籍(一):行業適配的獲客方式》

在財稅服務這片競爭激烈的紅海中&#xff0c;客戶資源如同氧氣——沒有它&#xff0c;企業寸步難行。然而殘酷的現實是&#xff0c;許多財稅企業正深陷“獲客泥潭”&#xff1a;投入巨大精力與成本&#xff0c;換來的卻是轉化渺茫、增長停滯的困境。高質量線索&#xff0c;已成…

使用tensorflow的多項式回歸的例子(一)

多項式回歸例1%matplotlib inlineimport tensorflow as tfimport numpy as npimport matplotlib.pyplot as plttrX np.linspace(-1, 1, 101)num_coeffs 6trY_coeffs [1, 2, 3, 4, 5, 6]trY 0for i in range(num_coeffs):trY trY_coeffs[i] * np.power(trX, i)trY np.rand…

STM32F103C8T6基于HAL庫驅動NB-IoT模塊BC26通信詳 解

一、引言&#xff1a; NB-IoT技術與應用場景NB-IoT&#xff08; Narrow Band Internet of Things &#xff09;作為低功耗廣域網&#xff08; LPWAN &#xff09;的核心技術&#xff0c;以其廣覆 蓋、低功耗、大連接、低成本的特性&#xff0c;廣泛應用于智能表計、環境監測、…

iOS 性能測試工具全流程:主流工具實戰對比與適用場景

在iOS開發中&#xff0c;性能優化往往被安排到開發后期&#xff0c;甚至上線前才臨時補救。但性能瓶頸通常是架構設計、資源加載、動畫機制等多方面共同作用的結果&#xff0c;僅憑肉眼感知和log輸出&#xff0c;難以精準定位。 一套合適的性能測試工具組合&#xff0c;不僅能幫…

目標檢測:視覺系統中的CNN-Transformer融合網絡

一、背景 無人機&#xff08;UAVs&#xff09;在城市自動巡邏中發揮著重要作用&#xff0c;但它們在圖像識別方面面臨挑戰&#xff0c;尤其是小目標檢測和目標遮擋問題。此外&#xff0c;無人機的高速飛行要求檢測系統具備實時處理能力。 為解決這些問題&#xff0c;我們提出了…

揭示宇宙的隱藏對稱性:群論-AI云計算拓展核心內容

通過利用云計算&#xff0c;借助群論對宇宙對稱性的探索&#xff0c;從離散群和李群等基礎概念&#xff0c;逐步深入到量子力學和更高自旋系統中的高級應用。 對稱性遠不止是美學上的吸引力&#xff1b;它是編織在宇宙結構中的一個基本原則。從雪花的復雜圖案到控制粒子的基本定…

前端項目vue3項目集成eslint@9.x跟prettier

tips: 這些涉及編輯器的修改不一定能及時生效&#xff0c;如果沒有生效&#xff0c;可以試試重啟編輯器窗口 編輯器集成 我的編輯器是vscode&#xff0c;需要安裝這兩個編輯器插件eslint prettier我這個配置主要是通過eslint提供的配置cli命令生成&#xff0c;在里面加入了對pr…

登錄超時問題的排查方法與預防經驗分享

??一、排查方法????檢查網絡連接??確保網絡穩定&#xff0c;嘗試重啟路由器或切換網絡&#xff08;如從WiFi切換到移動數據&#xff09;。使用命令&#xff08;如 ping 或 traceroute&#xff09;測試網絡連通性&#xff0c;排查是否存在丟包或高延遲。??驗證服務端狀…

uniapp,Anroid10+版本如何保存圖片并刪除

Android 10系統開始 進一步增強了平臺功能&#xff0c;為外部存儲設備上的應用和用戶數據提供了更好的保護。作為這項工作的一部分&#xff0c;平臺引入了進一步的改進&#xff0c;以簡化向分區存儲的轉換。 為了讓用戶更好地控制自己的文件&#xff0c;保護用戶隱私數據&#…

Jenkins Pipeline 語法

Pipeline 簡介 Jenkins2.x 的核心是使用 pipeline 來構建項目,也就是流水線,將 Jenkins1.0 版本中基于表單的配置信息比如 JDK/SVN 以及參數的配置都轉變成了代碼,即 pipeline as Code。 傳統的表單方式有以下缺點: 需要大量的 web 表單交互,有時候需要進行很多次的切換…

搭建滲透測試環境

一、基于docker搭建靶場 #此步驟需要科學上網 #從軟件源中下載 docker.io 和 docker -compose 軟件包及其依賴項。 sudo apt-get install docker.io docker-compose #查看docker版本 docker -v #查看docker信息 docker info #重啟docker服務 sudo systemctl daemon-reload sudo…