Динамический typedef примитива в C ++ - PullRequest
3 голосов
/ 16 июня 2011

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

В настоящее время я использую typedef;

typedef float real;

Это так, я могуизмените точность значений с плавающей запятой на удвоенные или длинные двойные, но, очевидно, мне придется перекомпилировать.Я хотел бы иметь возможность четко определить тип реального во время выполнения, чтобы я мог указать точность с помощью командной строки или интерфейса GUI инициализации.

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

Ответы [ 2 ]

2 голосов
/ 16 июня 2011

Число с плавающей запятой использует меньше памяти, чем double, и менее точно.

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

Просто используйте double.

2 голосов
/ 16 июня 2011

Как отмечает @Kerrek SB, я не уверен, что есть такое большое преимущество использования float с над double с.

Я не могу сказать однозначно, не увидев ваш код, но выможет быть в состоянии делать то, что вы хотите с шаблонами.

template <typename T>
T Crunch1(T rhs)
{
    // do something with 'rhs' and return the result
}
template <typename T>
T Crunch2(T lhs, T rhs)
{
    // do something with 'lhs' & 'rhs' and return the result
}

Это все еще время компиляции, а не полиморфизм времени выполнения, но может быть ближе всего к тому, что вы хотите.

И вы можете создать серию плагинов (по одному для каждой желаемой точности) и выбрать их во время выполнения, как вы предлагаете.Каждый плагин был бы экземпляром кода шаблона для определенной точности.Сочетание шаблонов и архитектуры плагинов даст вам необходимую гибкость без дублирования кода, которого вы явно пытаетесь избежать.

...