2016-03-09 3 views
0

У меня есть большой массив с плавающей точкой, но мне не нужна вся 32-разрядная точность и вам нужно сохранить ram, поэтому я использую unsigned short type, так как мне нужно всего 2 десятичных знака max dont excedd 654.unsigned short to custom float 16 bit

Так что единственное, что я должен сделать для каждого пользователя, - умножить на 0.01;

Есть ли способ создать тип для этого, используя typedef или union или struct, не теряя при этом плунжер и экономя максимум процессора?

, что у меня сейчас есть это, а не центральный процессор дружественным Я думаю

vector<unsigned short> vect(bigvalue); 
for(int i=0;i<bigvalue;i++)(vect[i]*0.01)*some expression... 

То, что я хочу, это какое-то типа, которым возвращение уже умноженное на 0,01 не теряют оперативной памяти

vector<float16bit> vect(bigvalue); 
for(int i=0;i<bigvalue;i++)(vect[i])*some expression... 

ли лучше путь?

Благодаря

+1

В какой момент вам нужно преобразование в число с плавающей запятой? Или вам просто нужна математика с фиксированной точкой. Если вам просто нужно это для хранения, вы можете использовать что-то вроде 'struct myType {short storage; operator float() {return storage * 0.01;}}; '(думаю, вы также должны проверить выравнивание типа, чтобы убедиться, что ваш компилятор не атомизирует его в 4 байта) – PeterT

ответ

-1

Вы можете создать класс (ведьма хранит беззнаковое короткое число) с перегруженными арифметическими операторами (+ - * /, и т.д.). Эти операторы должны учитывать коэффициент 100 при выполнении своей работы.

class FastFloat 
{ 
    unsigned short n; 

    ... 

    FastFloat(const unsigned short n): n(n){} 

    FastFloat operator+(const FastFloat &ff) 
    { 
     return FastFloat(this->n + ff.n); 
    } 

    // same for other operators 
}; 
Смежные вопросы