定点数数学库fpm源码走读
定点数数学库fpm(fixed-point math)
github:https://github.com/MikeLankamp/fpm
仅包含头文件的实现,需要C++11或以上。
https://github.com/TxtpGame/fpm/blob/master/docs/index.md
核心文件
fixed.hpp:提供定点数的核心逻辑
ios.hpp:提供定点数文本流的输入和输出
math.hpp:提供一些简单的数学函数
fixed.hpp
定点数的本质:移位FractionBits,将小数放大成整数
BaseType:实际存储的类型
IntermediateType:中间计算的类型
FractionBits:移位的位数,8 16 24。8相当于放大65536倍
FRACTION_MULT:实际的放大倍数
raw_construct_tag:空结构体,占位用的,函数重载,有一个特殊的构造函数内部使用
构造函数:integral、floating-point、fixed-point
类型转换函数:integral、floating-point
定点数之间的转换:考虑FractionBits的不同
定义了一些数学常量,e pi
接下来重载一些运算符-、+=、-=、*=、/=
using fixed_16_16 = fixed<std::int32_t, std::int64_t, 16>;
using fixed_24_8 = fixed<std::int32_t, std::int64_t, 8>;
using fixed_8_24 = fixed<std::int32_t, std::int64_t, 24>;
定义3种常用的类型,
接下来:定义一些运算符重载
Addition、Subtraction、Multiplication、Division
==、!=、<、>、<=、>=
接下来:实现了std::hash
接下来:实现了numeric_limits
ios.hpp
实现了 operator<<、operator>>
math.hpp
实现了一些数学函数,里面涉及到泰勒展式,挺有意思的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了