一、源码

这段代码实现了一个符合 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;结合 …