Re[2]: Decimal for C++
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 27.12.20 19:48
Оценка:
Здравствуйте, cppguard, Вы писали:

C>Зачем хранить знаменатель и другие выводимые поля в памяти, если знаменатель можно сделать всегда равным степенью двойки и хранить в виде параметра шаблона? Какой вообще смысл имеют знаменатели отличные от степеней двойки?


Тип называется Decimal, поэтому и знаменатель десятичный. Максимально десятичная семантика.

denum в принципе можно было бы и не хранить, а вычислять по месту из precision, это из разряда преждевременной оптимизации, просто по опыту решил, что это будет лучше. Ну и все равно, раз num — 64 бита, а для precision много не надо, то denum можно и кешировать в 32ух битной переменной.

Тут, имхо, можно было обойтись без DecimalDenumerator, и обойтись только DecimalPrecision и Decimal, ну тут хз, я предпочитаю прослойки делать почаще.

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

Я float/double конверсию специально сделал через строку — переложил ответственность за точность представления на стандартную либу std — "пусть лошадь думает, у неё голова большая". Потом можно будет и продумать получше этот нюанс, но пока float/doudle просто из кода пропали совсем.

Выходы за диапазоны (при всяких арифметических операциях в том числе) тоже не проверял — для финансовых расчётов всё равно никому верить нельзя, всё самому надо проверять, и входные данные, и выходное число. Тут наверное надо какие-то limits/traits допилить, чтобы было с чем сравнивать
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.