|
|
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
maytonДайте в Java примитивный тип decimal и все будут рукоплескатьКак уже упоминалось, не decimal вам требуется, а перегрузка операторов.Унылое бормотание теоретиковОптимистичные практики должны понимать, что long достаточен для хранения бюджета всей страны в копейках. Даже после масштабирования на десять, чтобы аккуратно работать с округлением. P.S. А, типа, с double результат форматировать не надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 19:36:09 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovmaytonДайте в Java примитивный тип decimal и все будут рукоплескатьКак уже упоминалось, не decimal вам требуется, а перегрузка операторов.Унылое бормотание теоретиковОптимистичные практики должны понимать, что long достаточен для хранения бюджета всей страны в копейках. Даже после масштабирования на десять, чтобы аккуратно работать с округлением. Учитывая забавные случаи внезапных инфляцией (гипер-инфляцией) которые некоторы страны переживали, такой способ хранения денежных величин - спорный. Впрочем надо посчитать. Вообще-то decimal, BCD, symbolic и прочие псевдо-символьные типы создавались с целью обеспечения 100% переносимости бухгалтерских вычислений "на бумаге". Я еще не готов находить конкретные юзкейсы этих случаев но давайте вместе с вами поищем эти случаи. Например - обеспечивать округление младших дробных разрядов вледствие частного от деления. Вам ведь придётся переводить этот long в строку, а это явно лишняя операция да и попахивает антипаттерном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 21:11:45 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
maytonУчитывая забавные случаи внезапных инфляцией (гипер-инфляцией) которые некоторы страны переживали, такой способ хранения денежных величин - спорный. Впрочем надо посчитать.В сравнении с double??? Я вас умоляю. 2^63 против 2^56 может вызывать какие-то вопросы? До десятков квадрилионов не дотягивают, вроде, ни японцы, ни счастливые обладатели песет.Вообще-то decimal, BCD, symbolic и прочие псевдо-символьные типы создавались с целью обеспечения 100% переносимости бухгалтерских вычислений "на бумаге"В этом контексте существенна именно десятичность арифметики. double не может обеспечить такой переносимости в принципе. Но используется. long обеспечивает такую переносимость просто по определению числа с фиксированной точкой. Но его использование вызывает вопросы. Практики продолжают отжигать. Уж простите мой сарказм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 22:02:06 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Забудьте про double!! Я его не обсуждаю вообще. Вы упомянули про long (очевидно имеется в виду 64-х битное целое). ОК. Давайте его и обсудим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 22:06:54 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
maytonВы упомянули про long (очевидно имеется в виду 64-х битное целое). ОК. Давайте его и обсудим.А что его обсуждать? Десятичный логарифм двух ~=0,3010, 64 * 0,3010 ~= 19,26 Восемнадцать гарантированных десятичных цифр и запас, позволяющий отследить переполнение при сложении. Для работы с десятыми копеек (одна запасная цифра) масштабируем на тысячу и получаем тысячу триллионов рублей. С валютной бухгалтерией чуть хуже, т.к. есть курсы, превышающие тысячу. Т.е. отразить продажу более ста миллиардов рублей - может и не получиться. С другой стороны - нафига японцам такая куча деревянных??? Хранение в базе? Для нового проекта нет принципиальной разницы - определить numeric(18,3) или numeric(18,0), для существующего - или конвертация типа столбцов (разово, но, возможно, медленно) или преобразование значений. Можно на стороне базы, можно через длинную арифметику на стороне ява-кода. По трудозатратности - не могу оценить, но вряд ли возня с рефакторингом double существенно проще. P.S. В финансовой арифметике "удобно" только сложение-вычитание. Как только начались проценты - прощай, оружие простота. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 08:25:17 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, myton Оригинальное обсуждение точности знаков после запятой от топикстартера на целом типе Long :) Вы бы как-нибудь к земле поближе с небес спустились что ли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 11:09:02 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
sanBezВы бы как-нибудь к земле поближе с небес спустились что лиПочитайте про числа с фиксированной запятой. Может тогда начнёте понимать тривиальные вещи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 12:44:54 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, 18 десятичных цифр - не вариант. Кстати предлагаю узнать следующий вопрос. Откуда у MS-SQL и Oracle в decimal, numeric, number появилось действующее ограничние в 38 десятичных разрядов. Думаю что эта цифра не с неба упала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 13:17:08 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovsanBezВы бы как-нибудь к земле поближе с небес спустились что лиПочитайте про числа с фиксированной запятой. Может тогда начнёте понимать тривиальные вещи. Срочно бегу учиться тривиальным вещам! :) Может еще совет дадите как реализовать в гипотетической биллинговой (финансовой) системе вычисления без деления и умножения? С использованием только целого long. Или приведете пример системы с тарифами, в которой достаточно только сложения и вычитания. Пока вышесказанное вами насчет использования long похоже на описание сферического коня в вакууме. P.S. А почетное звание теоретега здесь не котируется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 13:45:40 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Добрый день, sanBez! > Может еще совет дадите как реализовать в гипотетической биллинговой > (финансовой) системе вычисления без деления и умножения? С > использованием только целого long. А в чём проблема использовать умножение и деление, считая в 0.1 копейках? Всё одно каждая операция должна округляться до копеек. > Пока вышесказанное вами насчет использования long похоже на описание > сферического коня в вакууме. У меня был опят написания модуля расчётов на long. Единица- 1/10 копейки. Зато считало реально быстро. PS: считались долги абонентов, поэтому ссылка на бюджет страны с гиперинфляцией не катит. -- Алексей Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 14:27:34 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraА в чём проблема использовать умножение и деление, считая в 0.1 копейках? Всё одно каждая операция должна округляться до копеек. Не всегда. У меня сейчас не копейки, а Квтч. Чел сидит, делает. Но например: переходящий остаток на следующий месяц в 0.3 кВтч, который может быть с плюсом или с минусом (в зависимости от округления в бОльшую или меньшую сторону: исходные значения например 1.7 или 2.3) надо учитывать. Гемора с вычислениями в целых мне что-то кажется много будет. GKS_SamaraУ меня был опят написания модуля расчётов на long. Единица- 1/10 копейки. Зато считало реально быстро. А что ты с целочисленным делением делал? Интересно, как реализовал. Там же обрезалочки идут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 15:03:40 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
sanBezА что ты с целочисленным делением делал? Интересно, как реализовал. Там же обрезалочки идутТоже мне бином ньютона ... Прибавили к делимому половину масштаба (5, 50 и т.д.) - получите "деление с округлением". P.S. Для масштаба равного единице - да, не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 15:12:34 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
sanBezМожет еще совет дадите как реализовать в гипотетической биллинговой (финансовой) системе вычисления без деления и умножения? С использованием только целого long.Натурально, с использованием положенных четёрых действий арифметики и масштабированием всех коэффициентов до целых. Для "процентовок" это, опять-таки, будет тысяча, т.к. ставок менее одной сотой процента, вроде, не бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 15:16:12 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov всех Поправка высоты чёрточки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 15:17:45 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Добрый день, sanBez! >> А в чём проблема использовать умножение и деление, считая в 0.1 >> копейках? Всё одно каждая операция должна округляться до копеек. > > Не всегда. > У меня сейчас не копейки, а Квтч. Чел сидит, делает. Но например: > переходящий остаток на следующий месяц в 0.3 кВтч, Тем не менее можно постановить, что числа меньше 0.001 кВт*ч не учитываются. И считать в 0.0001 кВт*ч. >> У меня был опят написания модуля расчётов на long. Единица- 1/10 >> копейки. Зато считало реально быстро. > А что ты с целочисленным делением делал? Тупо в лоб: Код: sql 1. 2. 3. И далее после деления его вызывать. Код: sql 1. Вопрос, правда, в том, не является ли это преждевременной оптимизацией - а то м.б. лучше использовать BigDecimal и не мучатся. Но у меня проект был тестовым на тему "насколько java быстра", поэтому я выжимал все соки :) -- Алексей Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 15:17:50 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
maytonBasil A. Sidorov, 18 десятичных цифр - не вариантПлохо вам.Откуда у MS-SQL и Oracle в decimal, numeric, number появилось действующее ограничние в 38 десятичных разрядов. Думаю что эта цифра не с неба упала.Ну ограничение (какой-то стандартной) реализации. Похоже на "long два разА" - вполне разумный компромисс между "надо много" и "надо быстро". В REXX я ставил "numeric digits 2000" и вполне быстро получал ответ из этих самых тысяч цифр. Арифметика там именно десятичная. Пределом (по исчерпанию системных ресурсов), в моём случае, было что-то около четырёх тысяч цифр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 15:26:48 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
GKS_Samara Вопрос, правда, в том, не является ли это преждевременной оптимизацией - а то м.б. лучше использовать BigDecimal и не мучатся. Но у меня проект был тестовым на тему "насколько java быстра", поэтому я выжимал все соки :) Сравнивал BigDecimal и свой результат? Насколько выигрыш получил? Меня пока BigDecimal устраивает, сейчас не слишком большие объемы вычислений. По сравнению с вытаскиванием из базы мизер, насколько я помню (проект давнишний). Я так на будущее, может соломку где заранее подстелить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 15:29:01 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Есть ещё вариант с упаковкой девяти десятичных цифр в int32 как "три группы по десять бит". Вроде даже стандартизирован. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 15:30:36 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Добрый день, sanBez! > Сравнивал BigDecimal и свой результат? Насколько выигрыш получил? Нет, не успел. Кризис настал, проект свернулся. > Меня пока BigDecimal устраивает, сейчас не слишком большие объемы > вычислений. > По сравнению с вытаскиванием из базы мизер, насколько я помню (проект > давнишний). > > Я так на будущее, может соломку где заранее подстелить... Опиши Num extends BigDecimal, а если надо - поменяешь на Num extends Long. -- Алексей Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 15:37:00 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
авторВ REXX я ставил Ради интереса - в каком году это было? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 15:43:08 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraОпиши Num extends BigDecimal, а если надо - поменяешь на Num extends Long. А зачем тогда при BigDecimal аналог твоего nround ? Тут так напрямую не очень красиво выйдет. Ладно, придут проблемы, тогда и буду решать. А пока не стоит заниматься преждевременной оптимизацией :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 15:49:33 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪРади интереса - в каком году это было?Район нулевых. С разбросом на пару лет в обе стороны. Что-то вроде AMD K6-2/300МГц/32Мб или 64Мб. OS/2. Считался, если правильно помню, факториал пятидесяти. Естественно, в цикле, а не рекурсивно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 15:52:30 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
chabapokеще топикстартеру можно загуглить ieee-754 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1033182&msg=14523312 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 21:25:09 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
из всех присуцвующих только Basil A. Sidorov говорит дело о длинном лонге ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 21:29:46 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
1. А где есть? Ну, не знаю... Transact SQL, Pl/SQL, С++ (в виде пользовательского типа, как расширение), common lisp, python 2. Что ещё предложите встроить? Предложу разрешить расширять Javа своими типами, как в С++, common lisp, python, C#, это как минимум. А так замечу, что Java -- язык для программирования бизнес-логики корпоративных приложений. Это по факту. По рождению -- конечно, это язык для программирования утюгов и холодильников, в таком языке, безусловно, точная десятичная арифметика не нужна. А вот в языке для программирования бизнес-логики корпоративных приложений обязана быть поддержка для точной десятичной арифметики, встроенная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2013, 14:58:20 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38324836&tid=2128984]: |
0ms |
get settings: |
10ms |
get forum list: |
23ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
50ms |
get topic data: |
18ms |
get forum data: |
4ms |
get page messages: |
91ms |
get tp. blocked users: |
3ms |
| others: | 292ms |
| total: | 503ms |

| 0 / 0 |
