小编Fum*_*Eda的帖子

试图降低几乎但不是很完整的数字类的速度开销

我已经实现了一个C++类,其行为与标准int类型非常相似.区别在于它有一个额外的"epsilon"概念,它代表一个小于1但大于0的微小值.一种思考方式是一个非常宽的固定点数,有32个MSB(整数)部分),32 LSB(ε部分)和中间的巨大零海.(注意:这个类和普通定点数之间的一个很大的区别是有两个符号,而不是一个:"value"和"epsilon"可以相互独立,而对于固定点,有一个符号表示全数.)

以下类可以工作,但在整个程序中引入了~2倍的速度惩罚.(该程序包含与此类无关的代码,因此该类的实际速度惩罚可能远大于2x.)我无法粘贴使用此类的代码,但我可以说以下内容:

+, -, +=, <, >并且>=是唯一使用频繁的运营商.使用setEpsilon()getInt()极为罕见.*也很少见,甚至根本不需要考虑epsilon值.

这是班级:

#include <limits>

struct int32Uepsilon {
typedef int32Uepsilon Self;

int32Uepsilon () { _value = 0;
                   _eps   = 0; }
int32Uepsilon (const int &i) { _value = i;
                               _eps   = 0; }
void setEpsilon() { _eps = 1; }
Self operator+(const Self &rhs) const { Self result = *this;
                                      result._value += rhs._value;
                                      result._eps   += rhs._eps;
                                      return result; }
Self operator-(const Self &rhs) …
Run Code Online (Sandbox Code Playgroud)

c++ optimization numbers operator-overloading

2
推荐指数
1
解决办法
149
查看次数

标签 统计

c++ ×1

numbers ×1

operator-overloading ×1

optimization ×1