我需要为没有FPU的Nintendo DS加速程序,所以我需要将浮点数学(模拟和慢速)更改为定点.
我是如何开始的,我将浮点数更改为整数,每当我需要转换它们时,我使用x >> 8将定点变量x转换为实际数字,将x << 8转换为定点.很快我发现无法跟踪需要转换的内容,我也意识到很难改变数字的精确度(在这种情况下为8).
我的问题是,我应该如何让这更容易,更快?我应该制作一个FixedPoint类,或者只是一个FixedPoint8 typedef或带有一些函数/宏的结构来转换它们,还是别的什么?我应该在变量名称中添加一些内容来显示它的定点吗?
我正在寻找用于财务数据的定点标准,你知道任何值得尝试的吗?您对手工制作的定点课程的表现有什么经验吗?
在地图/集合中使用双精度作为关键字的问题是浮点精度.
有些人建议在比较函数中添加epsilon,但这意味着您的密钥将不再满足必要的严格弱排序标准.这意味着您将获得不同的集/映射,具体取决于插入元素的顺序.
如果您想基于双值聚合/组合/合并数据,并且愿意允许一定程度的舍入/ epsilon(显然,您将不得不),以下解决方案是个好主意吗?
通过将它们乘以精度因子(例如1e8)并舍入到最接近的整数(int)i+0.5
(如果i> 0),将所有双精度数(我们打算作为键)转换为整数,然后创建一个关闭这些整数的集合/映射.在提取键的最终值时,将int除以精度因子以获得双值(尽管是舍入的).