реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Библиотека для работы с 64 битным целым, Не встречал ли кто такую
Мусатов Констант...
сообщение Mar 1 2007, 17:39
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



При работе потребовалась обработка данных типа money. Это 64 битное целое, представляющее дробное число с фиксированным количеством знаков после запятой - 4. Вопрос стоит об оптимизированной библиотеке под IAR. Понятно, что неоптимизированную на С я и сам напишу достаточно быстро.
Go to the top of the page
 
+Quote Post
vmp
сообщение Mar 1 2007, 17:54
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Цитата(Мусатов Константин @ Mar 1 2007, 17:39) *
При работе потребовалась обработка данных типа money. Это 64 битное целое, представляющее дробное число с фиксированным количеством знаков после запятой - 4. Вопрос стоит об оптимизированной библиотеке под IAR. Понятно, что неоптимизированную на С я и сам напишу достаточно быстро.


А встроенный тип signed long long или unsigned long long чем не подходит?
Смотри EWARM_CompilerReference.pdf, Part 2. Compiler Reference, Data Representation, Basic data types.
Go to the top of the page
 
+Quote Post
Alex03
сообщение Mar 1 2007, 18:33
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



тем более что вряд ли эти money надо умножать друг на друга? (не представляю рубль в квадрате smile.gif )
Скорее всего складывать/вычитать, да умножать на количество (т.е. на целое)
Если так то long long вполне рулит, а то и сразу int64_t.
Go to the top of the page
 
+Quote Post
Мусатов Констант...
сообщение Mar 1 2007, 18:40
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



Цитата(vmp @ Mar 1 2007, 17:54) *
А встроенный тип signed long long или unsigned long long чем не подходит?
Смотри EWARM_CompilerReference.pdf, Part 2. Compiler Reference, Data Representation, Basic data types.

В общем-то это и есть тот тип, базируясь на котором и можно написать нужное. В принципе, остаются только вопросы округления при делении и умножении, поскольку 4 знака после запятой в этих операциях превращаются в 8. Потому и спрашивал уже готвое. Ладно, наверно проще написать.

Спасибо.

Умножать и делить надо. Например, дробное количество умножить на дробную цену.

Сообщение отредактировал Мусатов Константин - Mar 1 2007, 18:40
Go to the top of the page
 
+Quote Post
abcdefg
сообщение Mar 1 2007, 18:59
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 23-01-06
Из: Msk
Пользователь №: 13 490



Цитата(Мусатов Константин @ Mar 1 2007, 18:40) *
В общем-то это и есть тот тип, базируясь на котором и можно написать нужное. В принципе, остаются только вопросы округления при делении и умножении, поскольку 4 знака после запятой в этих операциях превращаются в 8. Потому и спрашивал уже готвое. Ладно, наверно проще написать.

Спасибо.

Умножать и делить надо. Например, дробное количество умножить на дробную цену.


Если уже собрались писать свою библиотеку для "денежного", рекомендую хранить в BCD-формате - и точность не теряется, и преобразования при печати практически отсутствуют...

А делить то точно надо??
Go to the top of the page
 
+Quote Post
Мусатов Констант...
сообщение Mar 1 2007, 19:10
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



Цитата
А делить то точно надо??

Да. Например, может прийти сумма и количество.
При печати свои заморочки вылазят, превышени размеров окон вывода... Потому бинарный формат мне интегрально удобней.
Go to the top of the page
 
+Quote Post
Alex03
сообщение Mar 2 2007, 08:24
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(Мусатов Константин @ Mar 1 2007, 20:40) *
Умножать и делить надо. Например, дробное количество умножить на дробную цену.

А кол-во тоже в этом же типе данных?
И кстати какая максимальная сумма возможна?
Знаковый инт64 может хранить ln(2^63)/ln(10) = 18,96488972683 десятичных разрядов.
Если в промежуточном вычислении 8 из них после запятой, то максимальная сумма будет порядка десятков миллиардов. Иначе в промежуточных вычислениях придётся использовать более широкие переменные. smile.gif
В BCD есть свои плюсы. smile.gif Но есть и минусы.
Можно ещё поизвращаться, выделив на дробную часть целое число бит (типа 50.14 или 48.16), но тут другой гемор вылезет (типа 5копеек+5копеек=11копеек). smile.gif

Цитата(Мусатов Константин @ Mar 1 2007, 21:10) *
Цитата
А делить то точно надо??

Да. Например, может прийти сумма и количество.

ИМХО вот тут то и может вылезти весь гемор с округлениями. Цена за единицу не всегда совпадёт с исходной. smile.gif
Go to the top of the page
 
+Quote Post
Мусатов Констант...
сообщение Mar 2 2007, 18:22
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



Я с этими округлениями на финансовых вещах с 93 года столько собак съел, что сыт по горло. Тип money стандартный для виндов и с ним мы уже научились корректно работать, что бы не копить по копейке на старость. Вообще, тут все дробное, и цена и количество и сумма и скидка. А еще есть бухгалтерские правила округления. В конце концов, всегда можно действовать как в старом анекдоте.
Алкаш подходит к продавщице в рюмочной: "Скажите, сколько стоит капля водки" - "Ни сколько" - "Так накапайте мне стаканчик!"

Сообщение отредактировал Мусатов Константин - Mar 2 2007, 18:23
Go to the top of the page
 
+Quote Post
Alex03
сообщение Mar 2 2007, 19:17
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



smile.gif И чё у человека не 8 пальцев на руках?
Считали бы всё в шестнадцатеричке и не жужжали б! smile.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 17:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01431 секунд с 7
ELECTRONIX ©2004-2016