2014-01-09 3 views
1

В моем торговом приложении я должен использовать десятичную величину для представления цен. Мне нужно минимально возможное задержка, поэтому единственным приемлемым решением было бы использовать int64 для представления десятичного числа. Я могу настроить на глобальном уровне, что мне не нужно, например, более 5 цифр после запятой, то вездеC++ decimal реализация на основе целых чисел

0.0000001 is not supported 
    0.000001 is not supported 
    1 should be used instead of 0.00001 
    10 should be used instead of 0.0001 
    100 should be used instead of 0.001 
    1000 should be used instead of 0.01 
    10000 should be used instead of 0.1 
    100000 should be used instead of 1 
    and so on 

Существуют ли какие-либо библиотеки, которые помогают делать такого рода работы? Я не совсем понимаю, нужна ли мне библиотека, возможно, мне следует просто работать с int64 и все? Любые подсказки и предложения приветствуются.

обн теперь я понял, что devide и multiply не obvios вообще. Поэтому я ищу некоторую библиотеку только заголовка, которая добавляет некоторые макросы функции для деления/умножения фиксированной точки, хранящейся в INT64.

+0

Есть ли причина, по которой 'decimal' не является опцией? Не могли бы вы создать пользовательский класс, который использует внутренне int64, например 'PrecisionDec (int int_part, int decimal_part)', который ограничивает 'decimal_part' значением 0 <= d <1E + 06? –

+0

@CodeswithHammer Мне следует избегать разных «экспонентов», потому что математика становится более сложной. – javapowered

+0

Ознакомьтесь с классом 'FixedPrecision' здесь: https://github.com/chadkler/FinancialTypes – Chad

ответ

3

Что вы предлагаете в основном fixed point arithmetic. Это способ вычисления десятичных дробей, используя только целые операции. Он может иметь некоторые преимущества скорости (в некоторых системах), и если он будет выполнен правильно, можно избежать некоторых ошибок, возникающих с помощью плавающей запятой.

Будут библиотеки, которые могут помочь, хотя причастность к математике довольно проста. Возможно, вам будет легко прочитать эту тему и реализовать ее самостоятельно.

+0

ссылки на чтение приветствуются :) – javapowered

+0

особенно интересно, как «девайд» должен быть реализован. если у меня есть 150.03 и 100.02, которые я храню как 15003 и 10001, тогда 150.03/100.02 = 1.50; 15003/10002 = 1,50. Shold магазин 1.50 длинный или как двойной? как 150 или 1,50? – javapowered

+0

Ссылка в Википедии в моем ответе дает хороший обзор операций. Для деления вы можете увеличить числитель снова, прежде чем выполнять расчет; т. е. 150,03 становится 1500300. Это означает, что расчет составляет: 150000/10002 = 150' –

Смежные вопросы