【PhysUnits】15.5 引入P1后的标准化表示(standardization.rs)

一、源码

这段代码实现了一个类型级别的二进制数标准化系统,主要用于处理二进制数的前导零和特殊值的简化。

rust 复制代码
use super::basic::{Z0, P1, N1, B0, B1, NonNegOne, NonZero};

/// 处理 B0<H> 类型的标准化
/// Standardization for B0<H> types
///
/// 当高位 H 为 Z0 时,将 B0<Z0> 转换为 Z0
/// Converts B0<Z0> to Z0 when higher bit H is Z0
pub trait IfB0 {
    type Output;
}

/// 处理 B1<H> 类型的标准化  
/// Standardization for B1<H> types
///
/// 当高位 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

pub trait IfB1 {
    type Output;
}

// ==================== IfB0 实现 ====================
impl<I: NonZero> IfB0 for I {
    type Output = B0<I>;
}

impl IfB0 for Z0 {// B0<Z0> => Z0
    type Output = Z0;
}

// ==================== IfB1 实现 ====================
impl<I: NonZero + NonNegOne> IfB1 for I {
    type Output = B1<I>;
}

impl IfB1 for N1 {// B1<N1> => N1
    type Output = N1;
}

impl IfB1 for Z0 {// B1<Z0> => P1
    type Output = P1;
}

二、代码解释:

  1. 引入依赖类型
rust 复制代码
use super::basic::{Z0, P1, N1, B0, B1, NonNegOne, NonZero};

从父模块中引入了以下类型和trait:

  • Z0: 表示零

  • P1: 表示正一

  • N1: 表示负一

  • B0, B1: 表示二进制位(0和1)

  • NonNegOne, NonZero: 标记trait,表示非负一和非零类型

  1. IfB0 trait
rust 复制代码
pub trait IfB0 {
    type Output;
}

这个trait用于处理B0类型的标准化:

  • 当高位H是Z0时,将B0转换为Z0

  • 否则保持B0不变

  1. IfB1 trait
rust 复制代码
pub trait IfB1 {
    type Output;
}

这个trait用于处理B1类型的标准化:

  • 当高位H是N1时,将B1转换为N1

  • 当高位H是Z0时,将B1转换为P1

  • 其他情况保持B1不变

  1. IfB0的实现
rust 复制代码
impl<I: NonZero> IfB0 for I {
    type Output = B0<I>;
}

impl IfB0 for Z0 {
    type Output = Z0;
}
  • 第一个实现:对于任何非零类型I,B0保持不变

  • 第二个实现:特殊处理B0,将其转换为Z0

  1. IfB1的实现
rust 复制代码
impl<I: NonZero + NonNegOne> IfB1 for I {
    type Output = B1<I>;
}

impl IfB1 for N1 {
    type Output = N1;
}

impl IfB1 for Z0 {
    type Output = P1;
}
  • 第一个实现:对于任何非零且非负一的类型I,B1保持不变

  • 第二个实现:特殊处理B1,将其转换为N1

  • 第三个实现:特殊处理B1,将其转换为P1

三、功能总结:

这段代码实现了一个类型级的二进制数标准化系统,主要处理以下转换:

  1. B0 → Z0

  2. B1 → N1

  3. B1 → P1

其他情况保持原样。这种标准化用于类型级的二进制表示优化,确保数值以最简形式表示。

所有函数都是编译时执行的(通过#inline提示和返回常量),这是类型级编程的典型特征,用于在编译时进行计算和类型转换。

相关推荐
独孤留白8 小时前
从C到Rust:Rust 的 Trait 不是Interface,那是什么?
rust
花褪残红青杏小16 小时前
Rust图像处理第7节-马赛克像素化:分块取平均色实现打码风格
rust·webassembly·图形学
doiito1 天前
【Agent Harness】Gliding Horse 设计细节 -- 不跟风开发自己的AI Agent
架构·rust·agent
doiito1 天前
【Agent Harness】Gliding Horse 核心设计理念,不跟风开发自己的AI Agent
ai·rust·架构设计·系统设计·ai agent
花褪残红青杏小2 天前
Rust图像处理第6节- 均值模糊 & 中值模糊:3×3 邻域的两种经典玩法
rust·webassembly·图形学
子兮曰2 天前
前端工具链的「Rust 化」:一场没有赢家的军备竞赛?
前端·后端·rust
星栈2 天前
写 Dioxus Demo 不难,难的是把它写成项目
前端·rust·前端框架
mCell2 天前
【锐评】桌面端技术营销:别拿跑分当工程判断
前端·rust·electron
武子康2 天前
调查研究-201 Rust 里的 dev build 和 release build:为什么同一份代码性能差这么多?
后端·架构·rust
doiito2 天前
【Agent Harness】Gliding Horse 的 L2 作战地图:让多 Agent 协作从“摸黑”变成“透明”
ai·rust·架构设计·系统设计·ai agent