pub struct ShortFloat { /* private fields */ }Expand description
模拟nars.entity.ShortFloat
- 🚩使用
u320~4294967296的范围覆盖0~10000² - ✨原生支持四则运算
- 🎯在基本的「证据数」基础上,添加更多NAL细节功能
- 📄原
nars.inference.UtilityFunctions的「扩展逻辑与或非」
- 📄原
- 🚩【2024-05-02 16:05:04】搬迁自
crate::entity::BudgetValue - 🚩【2024-05-02 17:48:30】现在全部抛弃基于「不可变引用」的运算
- ⚠️混合「传可变引用」和「直接传值」的代码将过于冗杂(并且造成接口不统一)
- 📌在实现了
Copy之后,将值的复制看作是「随处可用」的
- 🚩【2024-05-03 11:11:48】现在将其概念与「短浮点」合并
§⚠️与OpenNARS不同的一点:浮点舍入问题
!📝OpenNARS的实现是「四舍五入」,而NARust的实现是「向下截断」
- ❗即便在构造时采用了
Float::round,但实际效果仍然与OpenNARS不同- ⚡为性能考量,许多运算最后的舍入操作仍然是四舍五入(整数除法,避免转换为浮点)
- 📄这导致
0.1 * 0.0005在OpenNARS中等于0.0001而在NARust中为0
OpenNARS中可行的推理:
IN: <A --> B>. %1.00;0.10% {6 : 3}
IN: <B --> C>. %1.00;0.01% {6 : 4}
1
OUT: <A --> C>. %1.00;0.00% {7 : 4;3}
OUT: <C --> A>. %1.00;0.00% {7 : 4;3}§📄OpenNARS
A float value in [0, 1], with 4 digits accuracy.
Implementations§
Source§impl ShortFloat
impl ShortFloat
Sourcepub fn new(value: u32) -> Result<Self, ShortFloatError>
pub fn new(value: u32) -> Result<Self, ShortFloatError>
以0~10000的整数创建(有检查)
Sourcepub fn is_in_range(value: Float) -> bool
pub fn is_in_range(value: Float) -> bool
🆕判断浮点数是否在范围内
- 📝判断「是否在范围外」直接使用「不在范围内」的逻辑
- 📄clippy提示「manual
!RangeInclusive::containsimplementation」
- 📄clippy提示「manual
- ✅对
NaN会默认返回false,故无需担心
Sourcepub fn value_float(&self) -> Float
pub fn value_float(&self) -> Float
模拟getValue
- 🚩获取浮点值
- 🚩【2024-05-03 10:51:09】更名为
value_float以暂时避免与「短浮点」的value重名
§📄OpenNARS
To access the value as float
@return The current value in float
Sourcepub fn value_short(&self) -> u32
pub fn value_short(&self) -> u32
🆕获取短整数(只读)
- 🎯用于在「其它地方的impl实现」中增强性能(直接读取内部数值)
Sourcepub fn set_value(&mut self, value: Float) -> Result<(), ShortFloatError>
pub fn set_value(&mut self, value: Float) -> Result<(), ShortFloatError>
模拟ShortFloat.setValue
- 🚩设置浮点值(有检查)
Sourcepub fn set_value_unchecked(&mut self, value: Float)
pub fn set_value_unchecked(&mut self, value: Float)
🆕设置浮点值(无检查)
- ⚠️必须确保值在范围内
§📄OpenNARS
Set new value, rounded, with validity checking
@param v The new value
Sourcepub fn float_to_short_value(value: Float) -> Result<u32, ShortFloatError>
pub fn float_to_short_value(value: Float) -> Result<u32, ShortFloatError>
🆕浮点转换为「短整数」(有检查)
- 🎯提取共用逻辑,以同时用于「构造」和「赋值」
- ✅无需考虑「NaN」「无限」等值:
Self::is_in_range会自动判断
Sourcepub fn float_to_short_value_unchecked(value: Float) -> u32
pub fn float_to_short_value_unchecked(value: Float) -> u32
🆕浮点转换为「短整数」(无检查)
- 🎯提取共用逻辑,以同时用于「构造」和「赋值」
- ⚠️必须确保值在范围内
Sourcepub fn is_valid_short(short: u32) -> bool
pub fn is_valid_short(short: u32) -> bool
🆕判断短整数是否合法
- 🚩直接判断「是否小于等于最大值」
Sourcepub fn check_valid(&self) -> Result<(), ShortFloatError>
pub fn check_valid(&self) -> Result<(), ShortFloatError>
🆕检查自身值是否合法
- 🚩判断自身值是否合法,然后返回
Result
Sourcepub fn validate(self) -> Result<Self, ShortFloatError>
pub fn validate(self) -> Result<Self, ShortFloatError>
🆕检查自身值是否合法,并返回自身
- 🚩判断自身值是否合法,然后返回
Result<Self, ShortFloatError> - 🎯用于「构造后立即检查」
Sourcepub fn from_float(value: Float) -> Self
pub fn from_float(value: Float) -> Self
从浮点到自身转换(不检查,直接panic)
- ❌在实现
TryFrom时,无法通过From实现:conflicting implementations of traitstd::convert::TryFrom<f64>for typeentity::short_float::ShortFloat
! ⚠️在「范围越界」时直接panic
- 🎯降低代码冗余量(减少过多的「错误处理」)
conflicting implementation in crate `core`:
- impl<T, U> std::convert::TryFrom<U> for T
where U: std::convert::Into<T>;pub fn to_float(&self) -> Float
pub fn set(&mut self, new_value: Self)
pub fn is_zero(&self) -> bool
pub fn is_one(&self) -> bool
pub fn is_half(&self) -> bool
pub fn value(&self) -> Float
Source§impl ShortFloat
【派生】用于「短浮点」的实用方法
impl ShortFloat
【派生】用于「短浮点」的实用方法
- 🚩【2024-06-20 22:21:57】现在直接对「短浮点」实现功能,不再搞特征那一套
- 💭实际上也可以重启「短浮点特征」,但此方面Rust比Java方便,故无需徒增复杂性
§📄OpenNARS
Common functions on real numbers, mostly in [0,1].
Sourcepub fn and(self, value: Self) -> Self
pub fn and(self, value: Self) -> Self
模拟UtilityFunctions.and
- 🚩扩展逻辑「与」
- 🚩现在直接使用
ShortFloat基于的std::ops::BitAnd特征
§📄OpenNARS
A function where the output is conjunctively determined by the inputs
@param arr The inputs, each in [0, 1] @return The output that is no larger than each input
Sourcepub fn and_multi(values: impl IntoIterator<Item = Self>) -> Self
pub fn and_multi(values: impl IntoIterator<Item = Self>) -> Self
🆕多个值相与
- 🚩直接派生自「两个值相与」
- 📝「扩展逻辑与」遵循交换律和结合律
Sourcepub fn or(self, value: Self) -> Self
pub fn or(self, value: Self) -> Self
模拟UtilityFunctions.or
- 🚩扩展逻辑「或」
- 🚩【2024-05-02 17:53:22】利用德摩根律行事
- 💭可能会有性能损失
- 🚩现在直接使用
ShortFloat基于的std::ops::BitOr特征
§📄OpenNARS
A function where the output is disjunctively determined by the inputs
@param arr The inputs, each in [0, 1] @return The output that is no smaller than each input
Sourcepub fn or_multi(values: impl IntoIterator<Item = Self>) -> Self
pub fn or_multi(values: impl IntoIterator<Item = Self>) -> Self
🆕多个值相或
- 🚩直接派生自「多个值相与」
- 📝「扩展逻辑或」遵循交换律和结合律
- ⚡优化:无需重复进行逻辑非
Sourcepub fn arithmetical_average(values: impl IntoIterator<Item = Self>) -> Self
pub fn arithmetical_average(values: impl IntoIterator<Item = Self>) -> Self
复刻OpenNARS nars.inference.UtilityFunctions.aveAri
- 🚩求代数平均值
- ❌不能用
impl IntoIterator<Item = Self>:要计算长度 - ⚠️迭代器不能为空
§📄OpenNARS
A function where the output is the arithmetic average the inputs
@param arr The inputs, each in [0, 1] @return The arithmetic average the inputs
Sourcepub fn geometrical_average(values: impl IntoIterator<Item = Self>) -> Self
pub fn geometrical_average(values: impl IntoIterator<Item = Self>) -> Self
复刻OpenNARS nars.inference.UtilityFunctions.aveGeo
- 🚩求几何平均值
- ❌不能用
impl IntoIterator<Item = Self>:要计算长度
§📄OpenNARS
A function where the output is the geometric average the inputs
@param arr The inputs, each in [0, 1] @return The geometric average the inputs
Sourcepub fn w2c(w: Float) -> Self
pub fn w2c(w: Float) -> Self
从真值的「w值」到「c值」
- 📄超参数
Parameters.HORIZON参见[crate::control::Parameters]
§📄OpenNARS
A function to convert weight to confidence
@param w Weight of evidence, a non-negative real number @return The corresponding confidence, in [0, 1)
Sourcepub fn W2C1() -> ShortFloat
pub fn W2C1() -> ShortFloat
在改版OpenNARS中是常量,在此处因为「常量函数难以构建」改为变量
Sourcepub fn W2C1_float() -> Float
pub fn W2C1_float() -> Float
在改版OpenNARS中是常量,在此处因为「常量函数难以构建」改为变量
Trait Implementations§
Source§impl Add for ShortFloat
impl Add for ShortFloat
Source§impl BitAnd for ShortFloat
实现「NAL逻辑与」
impl BitAnd for ShortFloat
实现「NAL逻辑与」
- 🚩【2024-05-03 11:31:18】对
clippy允许「令人疑惑的代数实现」 ? 💭是否可以自动派生(主要是受到「孤儿规则」的限制)
Source§impl BitOr for ShortFloat
实现「NAL逻辑或」
impl BitOr for ShortFloat
实现「NAL逻辑或」
- 🚩【2024-05-03 11:31:18】对
clippy允许「令人疑惑的代数实现」 ? 💭是否可以自动派生(主要是受到「孤儿规则」的限制)
Source§impl Clone for ShortFloat
impl Clone for ShortFloat
Source§fn clone(&self) -> ShortFloat
fn clone(&self) -> ShortFloat
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ShortFloat
impl Debug for ShortFloat
Source§impl Default for ShortFloat
impl Default for ShortFloat
Source§fn default() -> ShortFloat
fn default() -> ShortFloat
Source§impl<'de> Deserialize<'de> for ShortFloat
impl<'de> Deserialize<'de> for ShortFloat
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Source§impl Display for ShortFloat
impl Display for ShortFloat
Source§impl Div<usize> for ShortFloat
整数除法
impl Div<usize> for ShortFloat
整数除法
Source§impl Div for ShortFloat
impl Div for ShortFloat
Source§impl EvidentNumber for ShortFloat
实现「证据数值」
impl EvidentNumber for ShortFloat
实现「证据数值」
Source§impl Hash for ShortFloat
impl Hash for ShortFloat
Source§impl Mul<usize> for ShortFloat
整数乘法
impl Mul<usize> for ShortFloat
整数乘法
Source§impl Mul for ShortFloat
impl Mul for ShortFloat
Source§impl Not for ShortFloat
实现「NAL逻辑非」
? 💭是否可以自动派生(主要是受到「孤儿规则」的限制)
impl Not for ShortFloat
实现「NAL逻辑非」 ? 💭是否可以自动派生(主要是受到「孤儿规则」的限制)
Source§impl Ord for ShortFloat
impl Ord for ShortFloat
Source§fn cmp(&self, other: &ShortFloat) -> Ordering
fn cmp(&self, other: &ShortFloat) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for ShortFloat
impl PartialEq for ShortFloat
Source§impl PartialOrd for ShortFloat
impl PartialOrd for ShortFloat
Source§impl Serialize for ShortFloat
impl Serialize for ShortFloat
Source§impl Sub for ShortFloat
impl Sub for ShortFloat
Source§impl TryFrom<f64> for ShortFloat
实现「从浮点到『短浮点』的直接转换」
🚩直接通过「构造函数+尝试转换」实现
impl TryFrom<f64> for ShortFloat
实现「从浮点到『短浮点』的直接转换」 🚩直接通过「构造函数+尝试转换」实现