Выбор типа данных - PullRequest
       1

Выбор типа данных

2 голосов
/ 12 февраля 2012

Я занимаюсь разработкой многоцелевой математической библиотеки C ++, которая будет использоваться для создания интерфейсов, игр и так далее.К сожалению, я застрял с дилеммой дизайна и мне нужно несколько мнений.Математическая библиотека содержит обычные классы Vector, Math, Matrix, но я не могу решить, использовать ли числа с плавающей точкой или числа с двойными числами.

Может ли кто-нибудь перечислить пару недостатков при переходе на все числа с плавающей или двойными.Будет ли мир стремиться к использованию всех двойных чисел, и стоит ли мне вообще беспокоиться о числах с плавающей запятой?

Имея это в виду, есть ли какие-то архитектурные преимущества, на которые я должен обратить внимание, например, будет ли использование двойных лучше использовать на64-битные системы, будут ли плавающие варианты лучше для 32-битных систем (как насчет операций SIMD?)

Каков идеальный способ разработки такой системы?

Ответы [ 4 ]

1 голос
/ 12 февраля 2012

Если ваша работа не связана с инженерной или научной деятельностью и не требует высокоточных результатов, использование double для графического программирования не дает никаких преимуществ. Палка с float.

Обратите внимание, что игровые движки повсеместно используют float. Хотя по умолчанию процессоры работают с высокой точностью, графические процессоры работают с указанной вами точностью и работают намного быстрее с float, чем с double; аналогично для SIMD наборов команд. Также обратите внимание, что OpenGL ES 1.1 и 2.0 даже не поддерживают double.

1 голос
/ 12 февраля 2012

У вас есть 2 варианта:

  1. Использовать шаблоны
  2. Используйте typedef

Они позволяют вам изменить тип. Возможность использовать оба типа лучше, чем использовать только один.

0 голосов
/ 12 февраля 2012

Число с плавающей точкой меньше (= быстрее для чтения / записи из памяти и для передачи из / в графическую память), быстрее для определенных операций (деления и квадратные корни), 4 числа с плавающей точкой хорошо вписываются в один регистр SIMD (однородные координаты)и иметь адекватную точность для игр.В 32/64-битных системах нет разницы в скорости между float / double.

В заключение: придерживайтесь поплавков.Возможно, вы захотите использовать typedef, например typedef float CoordinateType.

0 голосов
/ 12 февраля 2012

В компиляторах Microsoft, которые я использую, нет математической библиотеки с плавающей точкой. Если вы передадите число с плавающей запятой математической функции, оно будет удвоено. Затем вы должны бросить результат обратно в плавающее. Таким образом, вы могли бы также пойти с двойным везде. (Если вы находитесь в этой среде).

[РЕДАКТИРОВАТЬ] Конечно, если у вас есть массив из 10000 значений с плавающей запятой, то использование float сэкономит значительный объем памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...