Мне было интересно, знает ли кто-нибудь о хороших ресурсах для математики с фиксированной точкой в С#? Я видел такие вещи (http://2ddev.72dpiarmy.com/viewtopic.php?id=156), и это (Каков наилучший способ математика с фиксированной запятой?) и ряд обсуждений о том, является ли десятичная точка действительно фиксированной точкой или фактически плавающей точкой (обновление: респонденты подтвердили, что это определенно с плавающей запятой), но я не видел сплошной С# библиотека для таких вещей, как вычисление косинуса и синуса.
Мои потребности просты - мне нужны основные операторы, плюс косинус, синус, arctan2, PI... Я думаю об этом. Может быть, sqrt. Я программирую 2D-игру RTS, в которой я в основном работаю, но движение единицы при использовании математики с плавающей запятой (удваивает) имеет очень малые погрешности с течением времени (10-30 минут) на нескольких машинах, что приводит к десинкам. Это в настоящее время только между 32-битной ОС и 64-разрядной ОС, все 32-битные машины, похоже, остаются в синхронизации без проблем, и это заставляет меня думать, что это проблема с плавающей точкой.
Я знал об этом как возможную проблему с самого начала и поэтому ограничил мое использование нецелочисленной математики положения как можно больше, но для плавного диагонального движения с разной скоростью я вычисляю угол между точками в радианы, затем получая составляющие движения x и y с sin и cos. Это главный вопрос. Я также делаю некоторые вычисления для пересечений сегментов линии, пересечений прямых линий, пересечений с прямой связью и т.д., Которые также, вероятно, должны перемещаться с плавающей точкой на фиксированную точку, чтобы избежать проблем с несколькими машинами.
Если есть что-то открытое в Java или VB или другом сопоставимом языке, я мог бы, вероятно, преобразовать код для моих целей. Главным приоритетом для меня является точность, хотя я бы хотел как можно меньше потери скорости по сравнению с текущей производительностью. Вся эта математическая вещь с фиксированной точкой очень полезна для меня, и я удивлен тем, насколько мало практической информации о ней есть в google - большинство вещей, похоже, являются либо теорией, либо плотными заголовочными файлами С++.
Все, что вы могли бы сделать, чтобы указать мне в правильном направлении, очень ценится; если я смогу получить эту работу, я планирую открыть исходные математические функции, которые я собрал, чтобы был ресурс для других программистов на С#.
UPDATE: я мог бы определенно создать таблицу поиска косинус/синус для моих целей, но я не думаю, что это сработало бы для arctan2, так как мне нужно было бы создать таблицу размером около 64,000x64,000 записей (yikes). Если вы знаете какие-либо программные объяснения эффективных способов вычисления таких вещей, как arctan2, это было бы потрясающе. Мой математический фон в порядке, но передовые формулы и традиционная математическая нотация очень сложны для перевода в код.