当前位置: 首页 > wzjs >正文

网站运营团队管理广州广告公司

网站运营团队管理,广州广告公司,加强学校网站建设的通知,陕西建设 节水 官方网站源代码 fixed.rs文件实现了一个定点数(Fixed Point)类型 Fixed,用于在整数运算中模拟小数运算。代码如下: //小数位数 const FIXED_FRACTION_BITS: u32 16; //用于 双线性插值(Bilinear Interpolation) 的计算,它决…

源代码

fixed.rs文件实现了一个定点数(Fixed Point)类型 Fixed,用于在整数运算中模拟小数运算。代码如下:

//小数位数
const FIXED_FRACTION_BITS: u32 = 16;
//用于 双线性插值(Bilinear Interpolation) 的计算,它决定了插值权重(weight)的精度位数。一般为4或8
const BILINEAR_INTERPOLATION_BITS: u32 = 4;#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub struct Fixed(i32);impl Fixed {pub const ONE: Fixed = Fixed(1 << FIXED_FRACTION_BITS);pub const HALF: Fixed = Fixed(1 << (FIXED_FRACTION_BITS-1));//FIXED_ONE/// 创建新的Fixed值pub fn new(value: i32) -> Self {Fixed(value)}/// 将浮点数转换为定点数pub fn from_float(x: f32) -> Self {Fixed(((x * (1 << FIXED_FRACTION_BITS) as f32) + 0.5) as i32)}/// 将定点数转换为整数(截断小数部分)pub fn to_int(self) -> i32 {self.0 >> FIXED_FRACTION_BITS}/// 获取双线性插值权重pub fn bilinear_weight(self) -> u32 {// 丢弃不需要的精度位let reduced = self.0 >> (FIXED_FRACTION_BITS - BILINEAR_INTERPOLATION_BITS);// 提取剩余的小数部分let fraction = reduced & ((1 << BILINEAR_INTERPOLATION_BITS) - 1);fraction as u32}/// 获取内部值pub fn raw_value(self) -> i32 {self.0}
}// 实现一些运算符重载以便更方便地使用
impl std::ops::Add for Fixed {type Output = Self;fn add(self, rhs: Self) -> Self {Fixed(self.0 + rhs.0)}
}impl std::ops::Sub for Fixed {type Output = Self;fn sub(self, rhs: Self) -> Self {Fixed(self.0 - rhs.0)}
}impl std::ops::Mul for Fixed {type Output = Self;fn mul(self, rhs: Self) -> Self {// 定点数乘法需要调整小数位Fixed((self.0 as i64 * rhs.0 as i64 >> FIXED_FRACTION_BITS) as i32)}
}impl std::ops::Div for Fixed {type Output = Self;fn div(self, rhs: Self) -> Self {// 定点数除法需要调整小数位Fixed(((self.0 as i64 << FIXED_FRACTION_BITS) / rhs.0 as i64) as i32)}
}impl std::ops::Shr<u32> for Fixed {type Output = Self;fn shr(self, rhs: u32) -> Self {Fixed(self.0 >> rhs)}
}impl std::ops::Shl<u32> for Fixed {type Output = Self;fn shl(self, rhs: u32) -> Self {Fixed(self.0 << rhs)}
}

代码解析:

常量定义
  1. FIXED_FRACTION_BITS: u32 = 16:
  • 表示小数部分占用的位数

  • 使用16位表示小数部分,意味着有16位小数和16位整数(在i32中)

  1. BILINEAR_INTERPOLATION_BITS: u32 = 4:
  • 用于双线性插值计算的精度位数

  • 通常设置为4或8位,决定了插值权重的精度

Fixed 结构体

Fixed 是一个包装了 i32 的新类型,用于表示定点数。

重要常量
  1. ONE: 表示定点数1.0,值为 1 << 16 (65536)

  2. HALF: 表示定点数0.5,值为 1 << 15 (32768)

主要方法
  1. new(value: i32): 直接从一个i32值创建Fixed数

  2. from_float(x: f32): 将浮点数转换为定点数

  • 公式:x * (1 << 16) + 0.5 (0.5用于四舍五入)
  1. to_int(): 将定点数转换为整数(截断小数部分)
  • 右移16位丢弃小数部分
  1. bilinear_weight(): 获取双线性插值权重
  • 先丢弃不需要的精度位(保留BILINEAR_INTERPOLATION_BITS位)

  • 然后提取剩余的小数部分作为权重

  1. raw_value(): 获取内部存储的原始i32值
运算符重载

实现了基本的算术运算,注意乘法和除法的特殊处理:

  1. 乘法:
  • 需要先将操作数扩展为i64防止溢出

  • 结果右移16位调整小数位

  1. 除法:
  • 被除数左移16位扩展

  • 然后进行除法运算

定点数表示原理

这个实现使用Q16.16格式的定点数:

  • 32位整数(i32)中,高16位表示整数部分,低16位表示小数部分

  • 例如:0x00010000 表示1.0 (1 << 16)

  • 例如:0x00008000 表示0.5 (1 << 15)

应用场景

这种定点数实现常用于:

  1. 需要高性能小数运算但不想用浮点数的场合

  2. 图形处理中的坐标计算

  3. 嵌入式系统等不支持浮点运算硬件的环境

  4. 双线性插值等需要精确控制精度的算法

双线性插值中使用时,bilinear_weight()方法提供了权重计算,通过控制BILINEAR_INTERPOLATION_BITS可以调整插值精度。

http://www.dtcms.com/wzjs/835330.html

相关文章:

  • 书写网站建设策划书wordpress 内页打不开
  • 南京地区网站开发房产网名字叫啥好听
  • 学校网站怎么做的好处wordpress有中文版没
  • 深圳建站网站网站公司天津网站开发价格
  • 有没有做家具特卖的网站网站网站建设网站
  • 佛山做外贸网站如何怎么开店
  • 上海创意型网站建设姑苏区住房和建设局网站
  • 网站浮动窗口怎么设置国际网站怎么做
  • 爱墙 网站怎么做网站用模板为什么不利于seo推广
  • 网站开发用什么软件用手机做网站的流程
  • 厦门做网站的公司有哪些网站建设刂搜金手指下拉贰肆
  • 淘客建站程序wordpress怎么做
  • 鲜花网站建设的总体目标网站集群建设要求
  • 阿里云二级域名建设网站友情链接的英文
  • 海南网站制做的公司龙岗 营销型网站建设
  • 怎么做网站快捷方式产品宣传网站的重点
  • 工作牌网站快速优化排名
  • phpcms 怎么做视频网站做外国购物网站需要交税吗
  • 网站关键词搜索优化是怎么做的创意网页设计作品
  • 如何查询某个网站的设计公司现在还做响应式网站吗
  • 淄博网站排名外包国际交易所app下载
  • 网站通知做文献的格式宠物社区网站开发设计文档
  • 微网站访问量专做淘宝的网站
  • 世界经理人网站手机版wordpress怎样删除主题
  • 手机移动端网站开发网站安装不了wordpress
  • php建立网站适合文章的wordpress
  • 腾讯 微商 网站 建设做网站实验体会
  • 垂直电商网站开发品牌查询网官网查询
  • 手表二级市场网站中国纪检监察报在线阅读
  • 微信店铺小程序开发教程seo工具