Дифференциация различных типов фиксированной точки Qx?

Как вы различаете различные типы Qx с фиксированной точкой в ​​вашем коде?

Будет ли приемлемо что-то вроде этого:

typedef int32_t q31;
typedef int32_t q25;
typedef int32_t q23;
typedef int32_t q15;

а затем (пример использования):

q23 x;
q23 y;
q31 out;
.
.
.    
out = do_something_input_q23s_output_q31(x,y);
// etc.

Имеют ли приведенные выше typedefs смысл? Какое решение было бы наиболее подходящим?


person Danijel    schedule 19.06.2017    source источник
comment
Не совсем - вы не можете указать более 6 знаков после запятой в 32-битном числе с плавающей запятой. Вы создаете библиотеку с фиксированной точкой?   -  person cup    schedule 19.06.2017
comment
Извините, не понял.   -  person Danijel    schedule 19.06.2017
comment
Какую безопасность типов вы хотите? Если много, вы можете обернуть типы в структуры за счет более неуклюжего использования. Простое typedef поверх int32_t не требует проверок во время компиляции. В этом случае вам может пригодиться венгерская нотация: описано здесь.   -  person user694733    schedule 19.06.2017
comment
Спасибо. Если я правильно понял, вы бы сделали что-то вроде: int q23SomeVariable;``int q23OtherVariable; и т. д.?   -  person Danijel    schedule 19.06.2017
comment
Да, вы бы использовали префикс, чтобы было легче увидеть возможные ошибки. И не забывайте о функциях преобразования int q25New = q25Fromq23(q23Old);. Но я бы подумал об использовании более описательных имен, чем q23.   -  person user694733    schedule 20.06.2017
comment
Обратите внимание, если вы используете венгерскую нотацию, эти typedef не обязательно плохие, даже если вы не получаете много помощи от компилятора. Невозможно дать одно верное решение, не зная полной картины вашего варианта использования.   -  person user694733    schedule 20.06.2017


Ответы (1)


Вы можете обернуть каждое целое число с фиксированной точкой в ​​​​структуру, что заставит компилятор применять тип. Я не знаю, как это влияет на производительность.

Я полагаю, вы могли бы использовать магию препроцессора, чтобы переключить реализацию на голые целые числа для выпуска.

person geon    schedule 01.11.2018