【unitrix】 1.7 规范化常量类型结构(standardization.rs)

一、源码

这段代码实现了一个二进制数字标准化系统,用于将二进制数字类型(B0/B1)转换为更简洁的表示形式。

//! 二进制数字标准化模块 / Binary Number Normalization Module
//! 
//! 提供将二进制数字(B0/B1)标准化为更简洁表示形式的功能
//! Provides functionality to normalize binary numbers (B0/B1) into more concise representations
//! 
//! 例如 B0<Z0> => Z0, B1<Z0> => P1, B1<N1> => N1
//! e.g. B0<Z0> => Z0, B1<Z0> => P1, B1<N1> => N1use crate::number::{Z0, P1, N1, B0, B1, NonNegOne, NonZero};/// 处理 B0<H> 类型的标准化 / Standardization for B0<H> types
///
/// 这个 trait 定义了将 B0<H> 类型数字标准化的行为。
/// This trait defines the behavior for normalizing B0<H> type numbers.
/// 
/// 当高位 H 为 Z0 时,将 B0<Z0> 转换为 Z0;
/// Converts B0<Z0> to Z0 when higher bit H is Z0;
/// 对于其他非零高位,保持 B0<H> 结构不变。
/// maintains B0<H> structure for other non-zero higher bits.
pub trait IfB0 {type Output;fn b0() -> Self::Output;
}/// 处理 B1<H> 类型的标准化 / Standardization for B1<H> types
///
/// 这个 trait 定义了将 B1<H> 类型数字标准化的行为。
/// This trait defines the behavior for normalizing B1<H> type numbers.
/// 
/// 当高位 H 为 N1 时,将 B1<N1> 转换为 N1;
/// Converts B1<N1> to N1 when higher bit H is N1;
/// 当高位 H 为 Z0 时,将 B1<Z0> 转换为 P1;
/// Converts B1<Z0> to P1 when higher bit H is Z0;
/// 对于其他非零非负一高位,保持 B1<H> 结构不变。
/// maintains B1<H> structure for other non-zero non-negative-one higher bits.
pub trait IfB1 {type Output;fn b1() -> Self::Output;
}// ==================== IfB0 实现 / IfB0 Implementations ====================/// 为所有非零类型实现 IfB0 / IfB0 implementation for all non-zero types
///
/// 保持 B0<H> 结构不变,其中 H 是非零类型
/// Maintains B0<H> structure where H is non-zero type
impl<I: NonZero> IfB0 for I {type Output = B0<I>;#[inline(always)]fn b0() -> Self::Output {B0::new()}
}/// 为零类型 Z0 实现 IfB0 / IfB0 implementation for zero type Z0
///
/// 将 B0<Z0> 转换为 Z0
/// Converts B0<Z0> to Z0
impl IfB0 for Z0 {// B0<Z0> => Z0type Output = Z0;#[inline(always)]fn b0() -> Self::Output {Z0::new()}
}// ==================== IfB1 实现 / IfB1 Implementations ====================/// 为非零非负一类型实现 IfB1 / IfB1 implementation for non-zero non-negative-one types
///
/// 保持 B1<H> 结构不变,其中 H 是非零非负一类型
/// Maintains B1<H> structure where H is non-zero non-negative-one type
impl<I: NonZero + NonNegOne> IfB1 for I {type Output = B1<I>;#[inline(always)]fn b1() -> Self::Output {B1::new()}
}/// 为负一类型 N1 实现 IfB1 / IfB1 implementation for negative-one type N1
///
/// 将 B1<N1> 转换为 N1
/// Converts B1<N1> to N1
impl IfB1 for N1 {// B1<N1> => N1type Output = N1;#[inline(always)]fn b1() -> Self::Output {N1::new()}
}/// 为零类型 Z0 实现 IfB1 / IfB1 implementation for zero type Z0
///
/// 将 B1<Z0> 转换为 P1
/// Converts B1<Z0> to P1
impl IfB1 for Z0 {// B1<Z0> => P1type Output = P1;#[inline(always)]fn b1() -> Self::Output {P1::new()}
}

二、模块功能

  • 提供将二进制数字(B0/B1)标准化为更简洁表示形式的功能

  • 例如:

  • B0 => Z0(二进制0后跟零 → 零)

  • B1 => P1(二进制1后跟零 → 正一)

  • B1 => N1(二进制1后跟负一 → 负一)

三、核心Trait定义

  1. IfB0 Trait
  • 处理B0类型的标准化

  • 规则:

    • 当高位H为Z0时:B0 → Z0

    • 其他非零高位:保持B0结构不变

  • 方法:

type Output;
fn b0() -> Self::Output;
  1. IfB1 Trait
  • 处理B1类型的标准化

  • 规则:

    • 当高位H为N1时:B1 → N1

    • 当高位H为Z0时:B1 → P1

    • 其他非零非负一高位:保持B1结构不变

  • 方法:

type Output;
fn b1() -> Self::Output;

四、具体实现

IfB0实现
  1. 对于所有非零类型:
  • 保持B0结构不变

  • 实现:

impl<I: NonZero> IfB0 for I {type Output = B0<I>;fn b0() -> Self::Output { B0::new() }
}
  1. 对于零类型Z0:
  • 将B0转换为Z0

  • 实现:

impl IfB0 for Z0 {type Output = Z0;fn b0() -> Self::Output { Z0::new() }
}
IfB1实现
  1. 对于非零非负一类型:
  • 保持B1结构不变

  • 实现:

impl<I: NonZero + NonNegOne> IfB1 for I {type Output = B1<I>;fn b1() -> Self::Output { B1::new() }
}
  1. 对于负一类型N1:
  • 将B1转换为N1

  • 实现:

impl IfB1 for N1 {type Output = N1;fn b1() -> Self::Output { N1::new() }
}
  1. 对于零类型Z0:
  • 将B1转换为P1

  • 实现:

impl IfB1 for Z0 {type Output = P1;fn b1() -> Self::Output { P1::new() }
}

五、技术细节

  1. 类型约束:
  • 使用NonZero和NonNegOne trait bound来限制实现类型

  • 确保只有符合条件的类型才能实现相应的trait

  1. 性能优化:
  • 所有方法都标记为#[inline(always)],确保内联优化

  • 使用new()方法创建实例,以便编译时计算

  1. 类型转换:
  • 通过关联类型Output指定转换结果类型

  • 转换过程完全在类型系统层面进行,不涉及运行时开销

六、设计目的

这个系统的主要目的是:

  1. 简化二进制数字的类型表示

  2. 消除冗余的类型结构(如B0其实就是Z0)

  3. 为类型系统提供更简洁的表示形式

  4. 支持编译时的数值计算和转换

这种设计常用于需要类型级数值计算的场景,如:

  • 物理单位系统

  • 矩阵维度计算

  • 编译时资源分配

  • 类型安全的API设计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/909511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NJet Portal 应用门户管理介绍

nginx向云原生演进&#xff0c;All in OpenNJet&#xff01; 1. 应用门户简介 NJet 应用引擎是基于 Nginx 的面向互联网和云原生应用提供的运行时组态服务程序&#xff0c;作为底层引擎&#xff0c;NJet 实现了NGINX 云原生功能增强、安全加固和代码重构&#xff0c;利用动态加…

uni-app学习笔记三十六--分段式选项卡组件的使用

先来看效果&#xff1a; 上图有3个选项卡&#xff08;PS:uniapp官方称之为分段器&#xff0c;我还是习惯叫选项卡&#xff09;&#xff0c;需要实现点击不同的选项卡时下方切换显示对应的数据。 下面介绍下实现的过程。 1.在uniapp官方文档下载并安装该扩展组件&#xff1a;u…

Qt:Qt桌面程序正常退出注意事项

一般情况下&#xff0c;Qt窗体的创建和显示命令如下&#xff1a; Main_window main_window; main_window.show(); 主窗体中设置属性Qt::WA_DeleteOnClose setAttribute(Qt::WA_DeleteOnClose); 则在main.cpp中可以将窗体创建为指针&#xff0c;这样在退出时可以正确释放指针…

【arXiv2024】时间序列|TimesFM-ICF:即插即用!时间序列预测新王者!吊打微调!

论文地址&#xff1a;https://arxiv.org/pdf/2410.24087 代码地址&#xff1a;https://github.com/uctb/TSFM 为了更好地理解时间序列模型的理论与实现&#xff0c;推荐参考UP “ThePPP时间序列” 的教学视频。该系列内容系统介绍了时间序列相关知识&#xff0c;并提供配套的论…

从0开始学习语言模型--Day02-如何最大化利用硬件

如何利用硬件 这个单元分为内核、并行处理和推理。 内核&#xff08;Kernels&#xff09; 我们说的内核一般指的就是GPU&#xff0c;这是我们用于计算的地方&#xff0c;一般说的计算资源就指的是GPU的大小。我们模型所用的数据和参数一般存储在内存里&#xff0c;假设把内存…

ElasticSearch配置详解:设置内存锁定的好处

什么是内存锁定 "bootstrap": {"memory_lock": "true" }内存锁定是指将Elasticsearch的JVM堆内存锁定在物理内存中&#xff0c;防止操作系统将其交换&#xff08;swap&#xff09;到磁盘。 内存交换是操作系统的虚拟内存管理机制&#xff0c;当…

成功解决 ValueError: Unable to find resource t64.exe in package pip._vendor.distlib

解决问题 我们在本地的命令行中运行指令"python -m pip install --upgrade pip"的时候&#xff0c;报了如下的错误&#xff1a; 解决思路 我们需要重新安装一下pip。 解决方法 步骤1&#xff1a; 通过执行下面的指令删除本地的pip: python -m pip uninstall pip…

仓库物资出入库管理系统源码+uniapp小程序

一款基于ThinkPHPuniapp开发的仓库物资出入库管理系统&#xff0c;适用于单位内部物资采购、发放管理的库存管理系统。提供全部无加密源码&#xff0c;支持私有化部署。 更新日志&#xff1a; 新增 基于UNIAPP开发的手机端&#xff0c;适配微信小程序 新增 字典管理 新增页面…

基于机器学习的逐巷充填开采岩层运动地表沉降预测

基于机器学习的逐巷充填开采岩层运动地表沉降预测 1. 项目概述 本报告详细介绍了使用Python和机器学习技术预测逐巷充填开采过程中地表沉降的方法。通过分析地质参数、开采参数和充填参数,构建预测模型评估地表沉降风险。 # 导入必要的库 import numpy as np import pandas…

MotleyCrew ——抛弃dify、coze,手动搭建多agent工作流

1. MotleyCrew 核心组件 &#xff0d; 协调器&#xff1a; Crew MotleyCrew 的核心是一个 “Crew” 对象&#xff0c;即多代理系统的指挥者。Crew 持有一个全局的知识图谱&#xff08;使用 Kuzu 图数据库&#xff09;&#xff0c;用于记录所有任务、任务单元和其执行状态。 Cr…

掌握这些 Python 函数,让你的代码更简洁优雅

在 Python 编程世界里&#xff0c;代码的简洁性与可读性至关重要。简洁优雅的代码不仅便于自己后期维护&#xff0c;也能让其他开发者快速理解逻辑。而 Python 丰富的内置函数和一些实用的第三方库函数&#xff0c;就是实现这一目标的有力武器。接下来&#xff0c;就为大家介绍…

简说ping、telnet、netcat

简说 ping 和 telnet 命令的作用、用法和区别&#xff0c;方便理解它们在网络诊断中的用途。 &#x1f310; ping 命令 ✅ 作用&#xff1a; ping 用于检测网络连通性。它通过向目标主机发送 ICMP Echo 请求 并等待回应&#xff0c;从而判断目标主机是否可达&#xff0c;并测…

基于STM32的超声波模拟雷达设计

一、雷达概述 雷达&#xff08;Radio Detection and Ranging&#xff0c;无线电探测与测距&#xff09;是一种利用电磁波探测目标位置、速度等信息的主动式传感器系统。其基本原理是发射电磁波并接收目标反射的回波&#xff0c;通过分析回波的时间差、频率变化等参数&#xff0…

飞书多维表格利用 Amazon Bedrock AI 能力赋能业务

背景 飞书多维表格是一款功能强大的在线数据管理与协作工具。它打破传统表格局限&#xff0c;将电子表格与数据库特性融合&#xff0c;支持看板、甘特图、表单等多种视图自由切换&#xff0c;可根据项目进度、任务管理等不同场景灵活展示数据。其丰富的字段类型能精准适配各类…

表格对比工具推荐,快速比对Excel文件

软件介绍 今天为大家推荐一款专为Excel用户设计的表格比较工具&#xff0c;简单易用&#xff0c;零基础也能快速掌握。 轻量高效的办公助手 Excel比较工具体积仅为11MB&#xff0c;占用空间小&#xff0c;运行流畅&#xff0c;适合各类电脑配置使用。 简洁明了的操作界面 软…

深入探究其内存开销与JVM布局——Java Record

Java 14引入的Record类型如同一股清流&#xff0c;旨在简化不可变数据载体的定义。它的核心承诺是&#xff1a;​​透明的数据建模​​和​​简洁的语法​​。自动生成的equals(), hashCode(), toString()以及构造器极大地提升了开发效率。 当我们看到这样的代码&#xff1a; …

Vue 3 九宫格抽奖系统,采用优雅的 UI 设计和流畅的动画效果

九宫格抽奖 预览地址 项目简介 这是一个基于 Vue 3 开发的现代化九宫格抽奖系统&#xff0c;采用优雅的 UI 设计和流畅的动画效果&#xff0c;为用户提供极致的抽奖体验。系统支持多种奖品配置&#xff0c;实时抽奖记录展示&#xff0c;以及完整的活动说明功能。 核心功能 …

无缝对接大疆算力平台:基于Coovally的无人机AI模型端到端优化方案

【导读】 随着无人机应用场景的快速拓展&#xff0c;企业对于定制化AI解决方案的需求日益迫切。大疆算力开放平台为开发者提供了专业的模型量化与部署环境&#xff0c;帮助开发者将训练好的AI模型高效部署至大疆无人机平台。 然而&#xff0c;要实现完整的AI开发闭环&#xf…

ubuntu下载CUDA cuDNN

nivida-smi查看显卡驱动版本 &#xff08;一&#xff09;安装CUDA cuda官网 cuda官网 下载对应版本的cuda 这个官网真不错啊&#xff0c;下面附上了指令 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin sudo mv c…

FreeRTOS定时器

目录 1.特性2.运行环境2.1 守护任务2.2 回调函数2.3 内部源码 3.和Linux对比4.ID5.数据传输6.操作函数6.1 创建6.2 删除6.3 启动6.4 停止6.5 复位&#xff08;重置&#xff09;6.6 修改周期6.7 注意事项 7.示例&#xff1a;一般使用8.示例&#xff1a;定时器防抖 1.特性 定时器…