【libm】 11 fmin函數 (fmin.rs)

一、源碼

這段代碼實現了一個符合 IEEE 754-2008 標準的 minNum 函數(在 Rust 中命名為 fmin),該功能在 IEEE 754-2019 標準中已被 minimumNumber 取代。

/* SPDX-License-Identifier: MIT OR Apache-2.0 */
//! IEEE 754-2008 `minNum`. This has been superseded by IEEE 754-2019 `minimumNumber`.
//!
//! Per the spec, returns the canonicalized result of:
//! - `x` if `x < y`
//! - `y` if `y < x`
//! - The other number if one is NaN
//! - Otherwise, either `x` or `y`, canonicalized
//! - -0.0 and +0.0 may be disregarded (unlike newer operations)
//!
//! Excluded from our implementation is sNaN handling.
//!
//! More on the differences: [link].
//!
//! [link]: https://grouper.ieee.org/groups/msc/ANSI_IEEE-Std-754-2019/background/minNum_maxNum_Removal_Demotion_v3.pdfuse super::super::Float;#[inline]
pub fn fmin<F: Float>(x: F, y: F) -> F {let res = if y.is_nan() || x < y { x } else { y };// Canonicalizeres * F::ONE
}

二、功能說明

1.核心邏輯:

  • 如果 y 是 NaN(非數字),或者 x 小于 y,則返回 x。

  • 否則返回 y。

  • 最后對結果進行“規范化”(Canonicalize),即乘以 F::ONE(可能是為了確保結果的格式一致,比如處理浮點數的符號位或特殊表示)。

  1. 規范行為(根據注釋):
  • 如果 x < y,返回 x。

  • 如果 y < x,返回 y。

  • 如果其中一個數是 NaN,返回另一個數(即忽略 NaN)。

  • 如果 x 和 y 相等(比如 -0.0 和 +0.0),可以返回任意一個(-0.0 和 +0.0 被視為相同,不像新標準那樣區分)。

  • 結果會被規范化(Canonicalized)。

  1. 未實現的功能:
  • 不處理 sNaN(Signaling NaN,觸發異常的 NaN),只處理 qNaN(Quiet NaN,靜默 NaN)。

三、代碼解析


#[inline]
pub fn fmin<F: Float>(x: F, y: F) -> F {let res = if y.is_nan() || x < y { x } else { y };res * F::ONE  // 規范化
}
  • #[inline]:提示編譯器嘗試內聯優化該函數。

  • F: Float:泛型約束,要求 F 必須是實現了 Float trait 的類型(比如 f32 或 f64)。

  • y.is_nan():檢查 y 是否是 NaN。

  • x < y:比較 x 和 y 的大小。

  • res * F::ONE:對結果進行規范化(可能是無操作,取決于 F::ONE 的具體實現)。

四、規范化(Canonicalize)

  • 注釋提到結果會被“Canonicalized”,但具體行為取決于 F::ONE 的實現。通常 F::ONE 是 1.0,所以 res * 1.0 可能不會改變數值,但可能會確保浮點數的二進制表示符合規范(比如清除多余的符號位或標準化 NaN 的表示形式)。

五、總結

這段代碼實現了 IEEE 754-2008 的 minNum,其核心邏輯是返回兩個數中較小的一個,并優先忽略 NaN。相比新標準(IEEE 754-2019),它不嚴格區分 -0.0 和 +0.0,并且不處理 sNaN。

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

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

相關文章

React 英語單詞消消樂一款專為英語學習設計的互動式記憶游戲

&#x1f4d6; 項目簡介 英語單詞消消樂 是一款專為英語學習設計的互動式記憶游戲。通過經典的消消樂玩法&#xff0c;讓用戶在輕松愉快的游戲中掌握英語單詞&#xff0c;提高詞匯量和記憶效果。 &#x1f3af; 項目目標 讓英語學習變得有趣且高效通過游戲化方式增強單詞記憶…

Qt:QPushButton、QRadioButton、QCheckBox

目錄 一、QPushButton 1.認識QPushButton 2.設置按鈕圖標 3.設置按鈕的快捷鍵 二、QRadioButton 常用的信號 按鈕的分組 三、QCheckBox 一、QPushButton 1.認識QPushButton QPushButton繼承自QWidget&#xff0c;所以在上一篇文章中介紹的QWidget的屬性&#xff0c;理…

docker 無法拉取鏡像解決方法

目錄 我在omv中通過后臺頁面拉取alist鏡像總是失敗&#xff0c;原因千奇百怪 今天再戰終于解決首先&#xff0c;到dockerhub找鏡像和wiki進入docker賬號設置 找到里面提示了登錄操作和密碼命令行中執行后會提示成功之后按需配置代理&#xff0c;同時檢查自己的配置檢查 Docker …

安卓10.0系統修改定制化_____安卓9與安卓10系統文件差異 有關定制選項修改差異

在修改安卓10的rom之前。我們需要對rom有簡單的了解。區分安卓10與安卓9之間的差異。了解不同安卓版本之間系統文件的變化以及權限的區別。對于修改一些定制化選項有很大的輔助作用. 通過博文了解?????? 1??????-----安卓10與安卓9之間文件實例對比 了解差異 …

HTML表單元素全面指南:從基礎到實踐

引言 HTML表單是網頁開發中不可或缺的一部分&#xff0c;它為用戶提供了與網站交互的途徑。無論是簡單的登錄頁面還是復雜的數據提交界面&#xff0c;表單元素都扮演著關鍵角色。本文將詳細介紹各種HTML表單元素及其使用方法。 輸入框(input元素) input元素是最基礎也是最靈…

深度學習的核心理論與技術

理解深度學習的基本原理、核心算法和關鍵技術 深度學習的核心理論與技術前言一、深度學習核心理論1. 神經網絡基礎核心內容練習資源2. 反向傳播與梯度下降核心內容練習資源3. 卷積神經網絡&#xff08;CNN&#xff09;核心內容練習資源4. 循環神經網絡&#xff08;RNN&#xff…

LinkedList 鏈表數據結構實現 (OPENPPP2)

&#x1f50d; LinkedList 鏈表數據結構實現 (OPENPPP2) &#x1f9f1; 1. 數據結構設計 LinkedListNode 結構 #mermaid-svg-XDJqt6cHMKxodJLG {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-XDJqt6cHMKxodJLG .er…

RPC/gRPC入門學習

一、RPC 1.1 RPC概念 RPC Remote Procedure Call, 即遠程過程調用&#xff0c;是一種用于構建分布式系統的理念&#xff0c;在一些資料中被稱為“請求-響應”協議。兩個進程可以位于同一系統中&#xff0c;也可以位于不同的系統中&#xff0c;通過網絡相互連接。 RPC使程…

租車小程序電動車租賃小程序php方案

電動車租賃小程序源碼&#xff0c;開發語言后端php&#xff0c;前端uniapp。四個端&#xff1a;用戶端門店端分銷商端小程序&#xff0c;pc管理后臺。一 用戶端&#xff1a;可以掃門店碼&#xff0c;進入門店詳情頁。也可以通過地圖找車。或者門店列表進入&#xff0c;或者快速…

Python數據分析基礎04:預測性數據分析

相關章節&#xff1a; 《Python數據分析基礎03&#xff1a;探索性數據分析》 《python數據分析基礎02&#xff1a;數據可視化分析》 《Python數據分析基礎01&#xff1a;描述性統計分析》 預測性數據分析&#xff08;Predictive Analytics&#xff09; 的深度解析&#xff0…

PFAE(Pyramidal Frequency Attention Extraction)通過頻域注意力機制提高邊界模糊、遮擋等場景的的檢測能力

在偽裝物體檢測中&#xff0c;現有方法多依賴空間局部特征&#xff0c;難以捕捉全局信息&#xff0c;而 Transformer 類方法計算成本高昂。頻率域特征因具備全局建模能力&#xff0c;可有效抑制背景噪聲、提升偽裝物體語義清晰度&#xff0c;但頻域與空域的頻繁轉換會增加計算復…

AE插件安裝方法

Adobe After Effects簡稱AE&#xff0c;是adobe公司開發的一個視頻剪輯及設計軟件&#xff0c;AE軟件能夠實現對素材的非線性編輯而完成畫面的組接&#xff0c;同時還能對任何一部分進行修改&#xff0c;達到想要的結果。AE含有很多腳本、常用的表達式和插件&#xff0c;做動畫…

舵輪時鐘-STM32-28路PWM--ESP8266-NTP時間

1.STM32--PWM生成STM32不具備如此多的PWM&#xff0c;因此采用軟件定時器的方案實現&#xff1a;使用hal庫實現&#xff1b;main.c#include "main.h"#define close1 500#define open 1500#define close 2500// 定時器中斷配置&#xff08;以TIM2為例&#xff09; voi…

Redis的單線程和多線程(單Worker線程)

Redis的單線程和多線程 Redis6.0之前是單線程的&#xff0c;6.0之后是多線程的&#xff0c;我們先了解6.0版本之前的單線程Redis。但其實無論6.0之前還是6.0之后&#xff0c;redis用于工作的線程也只有一個&#xff0c;所以也可以說redis一直是單線程的。 Redis單線程 Redis 6.…

OSPFv3基礎

文章目錄 OSPFv3基礎OSPFv3的改進OSPFv2 v3相同OSPFv2 v3不同 &#x1f3e1;作者主頁&#xff1a;點擊&#xff01; &#x1f916;Datacom專欄&#xff1a;點擊&#xff01; ??創作時間&#xff1a;2025年07月07日22點31分 OSPFv3基礎 OSPFv3協議號依然為89&#xff0c;在I…

前端篇——HTML知識點體系

目錄 一、基礎結構與文本 1. 文檔基礎 2. 文本元素 二、多媒體元素 1. 圖像 2. 音頻 3. 視頻 三、列表系統 1. 無序列表 2. 有序列表 3. 定義列表 四、表格系統 1. 表格結構 2. 合并單元格 五、表單系統 1. 輸入控件 2. 表單元素 3. 高級表單特性 六、布局系…

產品需求管理文檔中,需求模塊是怎么界定的

產品需求文檔中&#xff0c;需求模塊的界定方式主要包括&#xff1a;1、基于業務流程的功能劃分、2、按用戶角色使用場景分類、3、根據系統架構與技術邊界拆解、4、對數據實體和功能點進行組合聚類、5、結合未來演進節奏設置獨立迭代單元。 其中&#xff0c;“基于業務流程的功…

國內免代理免費使用Gemini大模型實戰

文章目錄 一、免費申請Gemini API密鑰二、使用openai-gemini1、在github上找到openai-gemini2、將openai-gemini部署到Netlify3、在Cherry Studio中配置和使用gemini的模型1&#xff09;在Cherry Studio中配置gemini API2&#xff09;在Cherry Studio中使用gemini 的模型 4、在…

day46-tomcat-java業務部署

1. ?選型1.1. &#x1f3af;中間件java web中間件說明tomcat組件&#xff0c;功能多jetty精簡&#xff0c;功能少一些......weblogic使用oracle數據庫配合weblogic(商業)國產&#xff1a;東方通(TongWEB)1.2. &#x1f4cc;jdkjdk選型說明jdk(oracle jdk)商業版&#xff0c;jd…

[netty5: HttpServerCodec HttpClientCodec]-源碼分析

在閱讀該篇文章之前&#xff0c;推薦先閱讀以下內容&#xff1a; [netty5: ChannelHandler & ChannelHandlerAdapter]-源碼解析[netty5: HttpObjectEncoder & HttpObjectDecoder]-源碼解析 HttpServerCodec HttpServerCodec 是一個 Netty 編解碼器&#xff0c;結合 …