【unitrix】 6.7 基本結構體(types.rs)

一、源碼

這是一個使用 Rust 類型系統實現類型級二進制數的方案,通過泛型和嵌套結構體在編譯期表示數值。

//! 類型級二進制數表示方案
//!
//! 使用嵌套泛型結構體表示二進制數,支持整數和實數表示。
//!
//! ## 表示規則
//! - 整數部分: `B<高位, 低位>` 結構體
//!   - `B<Null, O>` = 0
//!   - `B<Null, I>` = -1
//!   - `B<B<Null, O>, I>` = 1
//! - 實數部分: `D<整數部分, 10的冪次>`
//!   - `D<Int, Exp10>` = Int × 10^Exp10use crate::sealed::Sealed;// 基本類型定義
#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Debug, Default)]
pub struct Null;  // 終止標記#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Debug, Default)]
pub struct O;     // 比特0#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Debug, Default)]
pub struct I;     // 比特1/// 二進制數結構體
/// - H: 高位部分 (B<H,L> 或 Null)
/// - L: 低位部分 (I 或 O)
#[derive(Eq, PartialEq, Clone, Copy, Debug, Default)]
pub struct B<H, L> {pub(crate) h: H,pub(crate) l: L,
}/// 十進制科學計數法
/// - Int: 二進制整數部分
/// - Exp10: 10的冪次(二進制表示)
#[derive(Eq, PartialEq, Clone, Copy, Debug, Default)]
pub struct D<Int, Exp10>(pub Int, pub Exp10);/// 原生數值包裝類型
#[derive(Eq, PartialEq, Debug, Clone, Copy, Default)]
pub struct V<T>(pub T);// 常用類型別名
pub type False = O;        // 邏輯假
pub type True = I;         // 邏輯真
pub type Z0 = B<Null, O>;  // 0
pub type P1 = B<Z0, I>;    // 1
pub type N1 = B<Null, I>;  // -1
pub type N2 = B<N1, O>;    // -2
pub type B0<H> = B<H, O>;  // 以0結尾的數
pub type B1<H> = B<H, I>;  // 以1結尾的數// 構造方法
impl<H> B<H, O> {#[inline]pub const fn b0(h: H) -> Self {B { h, l: O }}
}impl<H> B<H, I> {#[inline]pub const fn b1(h: H) -> Self {B { h, l: I }}
}impl<H, L> B<H, L> {#[inline]pub const fn new() -> Self {Self::default()}
}impl<Int, Exp10> D<Int, Exp10> {#[inline]pub const fn new() -> Self {Self::default()}
}impl Null {#[inline]pub const fn new() -> Self {Null}
}// 密封標記實現
impl<H, L> Sealed for B<H, L> {}
impl<Int, Exp10> Sealed for D<Int, Exp10> {}
impl Sealed for Null {}
impl Sealed for O {}
impl Sealed for I {}
impl<T> Sealed for V<T> {}

二、代碼解析

  1. 基本設計理念
  • 使用類型系統在編譯期表示數值

  • 通過嵌套泛型結構體表示二進制位

  • 支持整數和實數(科學計數法)表示

  1. 核心類型定義
    基本標記類型:

struct Null;  // 終止標記,表示沒有更高位
struct O;     // 表示二進制位0
struct I;     // 表示二進制位1

二進制數結構體 B<H, L>:


struct B<H, L> {h: H,  // 高位部分l: L   // 低位部分(只能是O或I)
}

表示規則:

  • B<Null, O> = 0

  • B<Null, I> = -1 (采用補碼表示)

  • B<B<Null, O>, I> = 1 (正數需要前導零)

十進制科學計數法 D<Int, Exp10>:


struct D<Int, Exp10>(Int, Exp10);

表示 Int × 10^Exp10,其中:

  • Int 是二進制整數部分

  • Exp10 是10的冪次(也用二進制表示)

  1. 類型別名

定義常用數字和邏輯值:


type False = O;        // 邏輯假
type True = I;         // 邏輯真 
type Z0 = B<Null, O>;  // 0
type P1 = B<Z0, I>;    // 1
type N1 = B<Null, I>;  // -1
type N2 = B<N1, O>;    // -2
  1. 構造方法

提供方便的構造方式:


// 構造以0結尾的數
B::<H>::b0(h) -> B<H, O>// 構造以1結尾的數  
B::<H>::b1(h) -> B<H, I>// 默認構造
B::new() -> B<H, L>
D::new() -> D<Int, Exp10>
Null::new() -> Null
  1. 密封特質(Sealed)

防止外部實現這些特質,保持類型安全:


impl Sealed for B<H, L> {}
impl Sealed for D<Int, Exp10> {}
// ...其他類型的Sealed實現
  1. 數值表示示例
  • 整數:

    • 0: B<Null, O>

    • 1: B<B<Null, O>, I>

    • -1: B<Null, I>

    • -2: B<B<Null, I>, O>

  • 實數:

    • -0.1: D<N1, N1> (-1 × 10^-1)

    • 20.0: D<B<P1, O>, P1> (2 × 10^1)

  1. 特點
  • 編譯期計算:所有數值在編譯期確定

  • 類型安全:通過類型系統保證操作合法性

  • 零成本抽象:運行時無額外開銷

  • 可擴展性:可以添加各種運算的類型級實現

這種設計常用于需要編譯期數值計算和驗證的場景,如維度檢查、單位系統等。

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

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

相關文章

基于Scikit-learn的機器學習建模與SHAP解釋分析

基于Scikit-learn的機器學習建模與SHAP解釋分析 1. 項目概述 本項目將使用Python的scikit-learn庫對一個包含400條記錄的數據集進行完整的機器學習建模流程,包括數據預處理、特征工程、模型訓練和模型解釋。我們將重點關注以下幾個方面: 數據預處理:包括連續變量的標準化/…

QA:備份一般存儲這塊是怎么考慮?備份服務器如何選擇?

1. 性能需求與架構設計 大數據平臺的備份需滿足高并發、加密傳輸、增量掃描、重復數據刪除&#xff08;重刪&#xff09;、數據壓縮等復雜操作&#xff0c;對備份服務器的計算能力、存儲吞吐及網絡帶寬提出極高要求。建議采用多節點集群架構&#xff0c;通過橫向擴展提升備份效…

【東楓科技】用于汽車和工業傳感器應用的高性能、集成式 24 GHz FMCW 雷達收發器芯片組

用于汽車和工業傳感器應用的高性能、集成式 24 GHz FMCW 雷達收發器芯片組 ADF5904是一款高度集成的4通道、24 GHz接收機下變頻器MMIC&#xff0c;具有卓越的低噪聲性能、高線性度和低功耗組合。ADF5904集成式多通道接收機下變頻器具有10 dB噪聲系數性能&#xff0c;優于競爭型…

新版本flutter(3.32.7) android 端集成百度地圖sdk

新版本flutter(3.32.7) android 端集成百度地圖sdk 因為官方文檔有很多地方沒有說清楚,導致在適配過程中踩了很多坑,本文檔基于已經實現集成的flutter安卓端應用編寫。 官方文檔地址:https://lbs.baidu.com/faq/api?title=flutter/loc/create-project/configure Flutt…

FreeRTOS—列表和列表項

文章目錄一、列表與列表項1.1.列表與列表項的簡介1.2.列表與列表項相關結構體1.2.1.列表結構體1.2.2.列表項結構體1.2.3.迷你列表項二、列表相關API函數2.1.列表相關API函數介紹2.1.1.vListInitalise( )初始化列表函數2.1.2.vListInitaliseItem( )初始化列表項函數2.1.3.vListI…

超詳細 anji-captcha滑塊驗證uniapp微信小程序前端組件

由于步驟太多&#xff0c;字數太多&#xff0c;廢話也太多&#xff0c;所以前后端分開講了&#xff0c;后端文章請看&#xff1a; 超詳細 anji-captcha滑塊驗證springbootuniapp微信小程序前后端組合https://blog.csdn.net/new_public/article/details/149116742 anji-captcha…

面向對象編程篇

文章目錄一、思維導圖二、詳細內容第 6 章&#xff1a;面向對象編程基礎6.1 面向對象編程的概念和優勢6.2 類和對象的定義與創建6.3 類的屬性和方法6.4 構造函數&#xff08;__init__&#xff09;和析構函數&#xff08;__del__&#xff09;6.5 封裝、繼承和多態的實現第 7 章&…

虛擬商品自動化實踐:閑魚訂單防漏發與模板化管理的技術解析

最近阿燦發現了一款閑魚虛擬商品賣家必備神器&#xff01;告別手動發貨&#xff0c;訂單自動處理&#xff0c;防錯防漏&#xff0c;支持課程、激活碼、電子書等多種商品&#xff0c;預設模板更省心。文末獲取工具&#xff01;最厲害的是&#xff0c;你完全不用一直開著電腦。以…

【Zephyr開發實踐系列】08_NVS文件系統調試記錄

文章目錄前言一、NVS原理介紹&#xff1a;二、BUG-NO1&#xff1a;將NVS運用在NAND-Flash類大容量存儲設備2.1 情況描述&#xff1a;2.2 BUG復現&#xff1a;文件系統設備樹構建測試應用編寫&#xff08;導致錯誤部分&#xff09;&#xff1a;問題呈現&#xff1a;2.3 問題簡述…

網絡安全第二次作業

靶場闖關1~8 1. 在url后的name后輸入payload ?name<script>alert(1)</script> 2. 嘗試在框中輸入上一關的payload,發現并沒有通過&#xff0c;此時我們可以點開頁面的源代碼看看我們輸入的值被送到什么地方去了 從圖中可以看到&#xff0c;我們輸入的值被送到i…

LangChain 源碼剖析(七)RunnableBindingBase 深度剖析:給 Runnable“穿衣服“ 的裝飾器架構

每一篇文章都短小精悍&#xff0c;不啰嗦。一、功能定位&#xff1a;Runnable 的 "增強包裝器"RunnableBindingBase 是 LangChain 中實現裝飾器模式的核心組件。它就像給原有 Runnable 套上一件 "功能外套"—— 不改變原有 Runnable 的核心邏輯&#xff0c…

為 Git branch 命令添加描述功能

寫在最前面的使用方式 查看 所有分支的備注 git branch.notes創建分支并為分支添加備注 git co -b feat/oauth -m 第三方用戶登錄對分支描述的添加與清除 添加 git branch.note --add 清除 git branch.note --clear &#x1f4dd; 為 Git branch 命令添加描述功能 &#x…

LeetCode|Day18|20. 有效的括號|Python刷題筆記

LeetCode&#xff5c;Day18&#xff5c;20. 有效的括號&#xff5c;Python刷題筆記 &#x1f5d3;? 本文屬于【LeetCode 簡單題百日計劃】系列 &#x1f449; 點擊查看系列總目錄 >> &#x1f4cc; 題目簡介 題號&#xff1a;20. 有效的括號 難度&#xff1a;簡單 題目…

使?Pytorch構建?個神經?絡

關于torch.nn:使?Pytorch來構建神經?絡, 主要的?具都在torch.nn包中.nn依賴于autograd來定義模型, 并對其?動求導.構建神經?絡的典型流程:定義?個擁有可學習參數的神經?絡遍歷訓練數據集處理輸?數據使其流經神經?絡計算損失值將?絡參數的梯度進?反向傳播以?定的規則…

網絡爬蟲的詳細知識點

基本介紹 什么是網絡爬蟲 網絡爬蟲&#xff08;Web Crawler&#xff09;是一種自動化程序&#xff0c;用于從互聯網上抓取、解析和存儲網頁數據。其核心功能是模擬人類瀏覽行為&#xff0c;通過HTTP/HTTPS協議訪問目標網站&#xff0c;提取文本、鏈接、圖片或其他結構化信息&…

AndroidX中ComponentActivity與原生 Activity 的區別

一、AndroidX 與原生 Activity 的區別 1. 概念與背景 原生 Activity&#xff1a;指 Android 早期&#xff08;API 1 起&#xff09;就存在于 android.app 包下的 Activity 類&#xff08;如 android.app.Activity&#xff09;&#xff0c;是 Android 最初的 Activity 實現&…

Spring AI 使用 Elasticsearch 作為向量數據庫

前言 嗨&#xff0c;大家好&#xff0c;我是雪荷&#xff0c;最近在公司開發 AI 知識庫&#xff0c;同時學到了一些 AI 開發相關的技術&#xff0c;這期先與大家分享一下如何用 ES 當做向量數據庫。 安裝ES 第一步我們先安裝 Elasticsearch&#xff0c;這里建議 Elasticsear…

TypeScript 配置全解析:tsconfig.json、tsconfig.app.json 與 tsconfig.node.json 的深度指南

前言在現代前端和后端開發中&#xff0c;TypeScript 已經成為許多開發者的首選語言。然而&#xff0c;TypeScript 的配置文件&#xff08;特別是多個配置文件協同工作時&#xff09;常常讓開發者感到困惑。本文將深入探討 tsconfig.json、tsconfig.app.json 和 tsconfig.node.j…

讀書筆記(學會說話)

1、一個人只有會說話&#xff0c;才會有好人緣&#xff0c;做事才會順利。會說話的人容易成功。善于說話的人易成功&#xff0c;而不善說話的人往往寸步難行。我們要把話說得好聽&#xff0c;同時更要把事做得漂亮。或許一句話&#xff0c;一件事&#xff0c;就可能使人生的旅途…

私有服務器AI智能體搭建-大模型選擇優缺點、擴展性、可開發

以下是主流 AI 框架與模型的對比分析&#xff0c;涵蓋其優缺點、擴展性、可開發性等方面。 文章目錄一、AI 框架對比二、主流大模型對比三、擴展性對比總結四、可開發性對比總結五、選擇建議&#xff08;按場景&#xff09;六、未來趨勢一、AI 框架對比 框架優點缺點擴展性可開…