Задача стоит таким образом: Осуществить бинарную совместимость (эквивалентность) ряда математических операций на разных платформах.
Пример. Есть дробное число, необходимо извлечь из него корень. Результат операции должен быть бинарно эквивалентен на всех заявленых платформах.
Под платформой понимается комбинация процессор/компиллятор (операционная система думаю роли не играет). Из списка заявленых платформ можно выделить: x86, x86_64, ppc, ppc_64, GCC 4.x, MSVC 2008. (Компиллятором от Microsoft можно пренебречь в релизе продукта, но для отладочной версии он очень желателен.)
Собственно, в чём заключается конечная задача, чтобы понять весь смысл зачем это нужно:
Тонкий сервер, толстый клиент. Результаты операций на клиентских машинах должны бинарно совпадать, потому что на них основываются дальнейшие вычисления. Погрешность на один бит недопустима чтобы не вызвать нарастающую рассинхронизацию вычислений.
Как это вижу в итоге я (целевой язык C++):
class Float
{
public:
// other math operations
static Float sqrt( const Float & f );
...
// common math operations
Float operator*( const Float & f ) const;
...
private:
<internal representation>
};
То-есть нужно выбрать внутреннее представление для заданного типа (int, long, float point number, fixed point number, etc) и гарантировать что операции на различных платформах дадут один и тот же результат.
Где об этом можно почитать? Какие опции GCC/MSVC существуют для математических операций? Потенциальные грабли? Приветствуются любые замечания.