LINUX.ORG.RU

Predictable Math Library


0

0

Ищется математическая библиотека для предсказуемых вычислений на C/C++. Задачи - арифметические операции над целыми числами и с плавающей точкой, наличие типичных функций вроде корня квадратного, экспоненты и т.п. Тригонометрия приветствуется, но в принципе её можно заменить табличными функциями.

Уже собрался писать свою, но может сверхразум ЛОРа меня переубедит.

★★★★★

если не найдешь здесь, могу посоветовать подойти с другой стороны - спросить тот же вопрос на форумах, где тусуются математики (например, есть http://dxdy.ru , но там, кажется, много любителей)

octave
()
Ответ на: комментарий от octave

> что это?

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

http://dxdy.ru


Там действительно одни любители, по крайней мене в разделе о программировании.

В идеале я хочу получить следующее:

Набор шаблонных классов для целых и с плавающей точкой чисел. Запрет на неявное преобразование из/в стандартные int/float/double/etc. Набор функций для работы на этими классами - сложение, умножение, деление, возведение в степень, прочее. Запрет переполнения. Табличные функции для работы с тригонометрией, таблицы должны грузиться из прекомпилированного бинарного блоба. Стандартные числа вроде Пи, Е в виде экземпляров собственных классов.

Dendy ★★★★★
() автор топика
Ответ на: комментарий от Dendy

Пользуясь случаем оставляю ссылку, которую мне подсказали в далёком прошлом: http://www.christian-seiler.de/projekte/fpmath/

Сейчас буду перечитывать, много правильной теории, которую хотелось бы увидеть в библиотеке на С++.

Dendy ★★★★★
() автор топика
Ответ на: комментарий от jtootf

Чтобы на разных компьютерах при одних и тех же параметрах уравнения результат совпадал вплоть до последнего бита.

Dendy ★★★★★
() автор топика
Ответ на: комментарий от jtootf

> я не спрашиваю, зачем это нужно - я спрашиваю, зачем это делать на C/C++

И у меня снова будет тот же вопрос: Что «это»? Я правда не понимаю что вы хотите узнать, попробуйте более полно раскрыть смысл слова «это», а там гляди в правильно заданом вопросе и ответ обнаружится.

Dendy ★★★★★
() автор топика
Ответ на: комментарий от Dendy

более полно раскрыть смысл слова «это»

C - это более-менее переносимый ассемблер, вся математика в C естественным образом привязана к архитектуре; зачем вместо того, чтобы взять более высокоуровневую систему, реализовывать предсказуемую математику именно на С?

аналогичным образом я бы удивлялся желанию писать кроссплатформенный GUI на ассемблере

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

Вот, теперь ясно, что вы хотели спросить. Реализовывать на C/С++ я её не собираюсь, мне нужен интерфейс для использования библиотеки в программах на C++. Для этого достаточно будет интерфейса на C, который я сам смогу завернуть в классы. В принципе я уже нашёл что искал - MPFR. Другой способ - сделать обёртку над double и менять точность FPU перед математическими операциями.

Dendy ★★★★★
() автор топика

Вероятно вам не интересно, но на всякий случай скажу, что такое джава умеет.

Legioner ★★★★★
()
Ответ на: комментарий от Dendy

> Другой способ - сделать обёртку над double и менять точность FPU перед математическими операциями.

не поможет. Любопытно, а для чего понадобилась такая библиотечка?

unC0Rr ★★★★★
()
Ответ на: комментарий от GArik

> Может вам нужен mpfr (http://www.mpfr.org/) ?

Спасибо. Уже вовсю читаю документацию по нему. Одним глазом смотрю как она реализована на плюсах вот в этой библиотеке: http://beshenov.ru/mpfrcpp/

Dendy ★★★★★
() автор топика
Ответ на: комментарий от unC0Rr

>> Другой способ - сделать обёртку над double и менять точность FPU перед математическими операциями.

не поможет.


Кристиан Сейлер убеждает в обратном. Но меня этот вариант не устраивает по многим причинам.

Во-первых он всё равно остаётся не до конца кроссплатформенным. Во-вторых максимум можно разинуть рот на double. В-третьих неизвестно насколько смена режима FPU реентрабельна, меньше всего хотелось бы использовать mutex.lockForWrite() и тем более per thread storage на каждый чих. В-четвёртых неизвестно как организовать смену режима, в каждой операции отдельно или глобальный переключатель на группу операций, в конце концов библиотека должна получиться простая, без неочевидных use-case'ов. Ну и в-последних неизвестно как будет вести себя стандартная математическая библиотека в таком режиме, не захочет ли она сама что-то там напереключать или использовать для вычисления внутренние типы (например long double), которые в итоге пустят коту под хвост всю идею.

Отдельная библиотека вроде MPFR лишена всех этих недостатков. Да, она будет работать медленнее, но это очевидная потеря в скорости, с которой я согласился задолго до идеи написать свою реализацию.

Любопытно, а для чего понадобилась такая библиотечка?


Сетевая игра с тонким сервером.

Dendy ★★★★★
() автор топика
Ответ на: комментарий от Dendy

> Отдельная библиотека вроде MPFR лишена всех этих недостатков. Да, она будет работать медленнее, но это очевидная потеря в скорости, с которой я согласился задолго до идеи написать свою реализацию.

Сетевая игра с тонким сервером.

да, любопытно... В своё время столкнулся с аналогичной проблемой в игре hedgewars, пораскинув мозгами понял, что мне достаточно чисел с фиксированной запятой (32 бита на целую часть, 32 на дробную), и что реализация такого числа быстрее библиотеки для чисел с плавающей запятой просто в силу своего формата.

unC0Rr ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.