【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
繁體地址,請注明出處:http://hk.pswp.cn/news/909511.shtml
英文地址,請注明出處:http://en.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.特性 定時器…