powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Арифметика Джавы. WTF?
25 сообщений из 53, страница 2 из 3
Арифметика Джавы. WTF?
    #38324718
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДайте в Java примитивный тип decimal и все будут рукоплескатьКак уже упоминалось, не decimal вам требуется, а перегрузка операторов.Унылое бормотание теоретиковОптимистичные практики должны понимать, что long достаточен для хранения бюджета всей страны в копейках. Даже после масштабирования на десять, чтобы аккуратно работать с округлением.

P.S. А, типа, с double результат форматировать не надо?
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38324789
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovmaytonДайте в Java примитивный тип decimal и все будут рукоплескатьКак уже упоминалось, не decimal вам требуется, а перегрузка операторов.Унылое бормотание теоретиковОптимистичные практики должны понимать, что long достаточен для хранения бюджета всей страны в копейках. Даже после масштабирования на десять, чтобы аккуратно работать с округлением.
Учитывая забавные случаи внезапных инфляцией (гипер-инфляцией) которые некоторы
страны переживали, такой способ хранения денежных величин - спорный. Впрочем надо
посчитать.

Вообще-то decimal, BCD, symbolic и прочие псевдо-символьные типы создавались с целью
обеспечения 100% переносимости бухгалтерских вычислений "на бумаге".

Я еще не готов находить конкретные юзкейсы этих случаев но давайте вместе с вами поищем
эти случаи. Например - обеспечивать округление младших дробных разрядов вледствие
частного от деления. Вам ведь придётся переводить этот long в строку, а это явно
лишняя операция да и попахивает антипаттерном.
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38324831
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonУчитывая забавные случаи внезапных инфляцией (гипер-инфляцией) которые некоторы
страны переживали, такой способ хранения денежных величин - спорный. Впрочем надо
посчитать.В сравнении с double??? Я вас умоляю.
2^63 против 2^56 может вызывать какие-то вопросы?
До десятков квадрилионов не дотягивают, вроде, ни японцы, ни счастливые обладатели песет.Вообще-то decimal, BCD, symbolic и прочие псевдо-символьные типы создавались с целью
обеспечения 100% переносимости бухгалтерских вычислений "на бумаге"В этом контексте существенна именно десятичность арифметики.
double не может обеспечить такой переносимости в принципе. Но используется.
long обеспечивает такую переносимость просто по определению числа с фиксированной точкой. Но его использование вызывает вопросы.
Практики продолжают отжигать. Уж простите мой сарказм.
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38324836
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забудьте про double!! Я его не обсуждаю вообще. Вы упомянули про long
(очевидно имеется в виду 64-х битное целое). ОК. Давайте его и обсудим.
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38324982
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВы упомянули про long (очевидно имеется в виду 64-х битное целое). ОК. Давайте его и обсудим.А что его обсуждать? Десятичный логарифм двух ~=0,3010, 64 * 0,3010 ~= 19,26
Восемнадцать гарантированных десятичных цифр и запас, позволяющий отследить переполнение при сложении.
Для работы с десятыми копеек (одна запасная цифра) масштабируем на тысячу и получаем тысячу триллионов рублей.
С валютной бухгалтерией чуть хуже, т.к. есть курсы, превышающие тысячу. Т.е. отразить продажу более ста миллиардов рублей - может и не получиться. С другой стороны - нафига японцам такая куча деревянных???
Хранение в базе?
Для нового проекта нет принципиальной разницы - определить numeric(18,3) или numeric(18,0), для существующего - или конвертация типа столбцов (разово, но, возможно, медленно) или преобразование значений.
Можно на стороне базы, можно через длинную арифметику на стороне ява-кода.
По трудозатратности - не могу оценить, но вряд ли возня с рефакторингом double существенно проще.

P.S. В финансовой арифметике "удобно" только сложение-вычитание.
Как только начались проценты - прощай, оружие простота.
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325160
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov, myton

Оригинальное обсуждение точности знаков после запятой от топикстартера на целом типе Long :)

Вы бы как-нибудь к земле поближе с небес спустились что ли
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325368
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanBezВы бы как-нибудь к земле поближе с небес спустились что лиПочитайте про числа с фиксированной запятой.
Может тогда начнёте понимать тривиальные вещи.
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325429
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov, 18 десятичных цифр - не вариант. Кстати предлагаю узнать следующий
вопрос. Откуда у MS-SQL и Oracle в decimal, numeric, number появилось действующее
ограничние в 38 десятичных разрядов. Думаю что эта цифра не с неба упала.
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325495
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovsanBezВы бы как-нибудь к земле поближе с небес спустились что лиПочитайте про числа с фиксированной запятой.
Может тогда начнёте понимать тривиальные вещи.

Срочно бегу учиться тривиальным вещам! :)

Может еще совет дадите как реализовать в гипотетической биллинговой (финансовой) системе вычисления без деления и умножения? С использованием только целого long.

Или приведете пример системы с тарифами, в которой достаточно только сложения и вычитания.

Пока вышесказанное вами насчет использования long похоже на описание сферического коня в вакууме.
P.S. А почетное звание теоретега здесь не котируется
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325535
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, sanBez!

> Может еще совет дадите как реализовать в гипотетической биллинговой
> (финансовой) системе вычисления без деления и умножения? С
> использованием только целого long.

А в чём проблема использовать умножение и деление, считая в 0.1
копейках? Всё одно каждая операция должна округляться до копеек.

> Пока вышесказанное вами насчет использования long похоже на описание
> сферического коня в вакууме.

У меня был опят написания модуля расчётов на long. Единица- 1/10
копейки. Зато считало реально быстро.

PS: считались долги абонентов, поэтому ссылка на бюджет страны с
гиперинфляцией не катит.

--
Алексей
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325591
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_SamaraА в чём проблема использовать умножение и деление, считая в 0.1
копейках? Всё одно каждая операция должна округляться до копеек.


Не всегда.
У меня сейчас не копейки, а Квтч. Чел сидит, делает. Но например: переходящий остаток на следующий месяц в 0.3 кВтч,
который может быть с плюсом или с минусом (в зависимости от округления в бОльшую или меньшую сторону: исходные значения например 1.7 или 2.3) надо учитывать.
Гемора с вычислениями в целых мне что-то кажется много будет.

GKS_SamaraУ меня был опят написания модуля расчётов на long. Единица- 1/10
копейки. Зато считало реально быстро.


А что ты с целочисленным делением делал? Интересно, как реализовал. Там же обрезалочки идут
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325611
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanBezА что ты с целочисленным делением делал? Интересно, как реализовал. Там же обрезалочки идутТоже мне бином ньютона ...
Прибавили к делимому половину масштаба (5, 50 и т.д.) - получите "деление с округлением".

P.S. Для масштаба равного единице - да, не работает.
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325620
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanBezМожет еще совет дадите как реализовать в гипотетической биллинговой (финансовой) системе вычисления без деления и умножения? С использованием только целого long.Натурально, с использованием положенных четёрых действий арифметики и масштабированием всех коэффициентов до целых.
Для "процентовок" это, опять-таки, будет тысяча, т.к. ставок менее одной сотой процента, вроде, не бывает.
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325625
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov всех Поправка высоты чёрточки.
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325626
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, sanBez!

>> А в чём проблема использовать умножение и деление, считая в 0.1
>> копейках? Всё одно каждая операция должна округляться до копеек.
>
> Не всегда.
> У меня сейчас не копейки, а Квтч. Чел сидит, делает. Но например:
> переходящий остаток на следующий месяц в 0.3 кВтч,

Тем не менее можно постановить, что числа меньше 0.001 кВт*ч не
учитываются. И считать в 0.0001 кВт*ч.

>> У меня был опят написания модуля расчётов на long. Единица- 1/10
>> копейки. Зато считало реально быстро.

> А что ты с целочисленным делением делал?

Тупо в лоб:
Код: sql
1.
2.
3.
nround(long value) {
  return (value+5)/10 * 10;
}



И далее после деления его вызывать.

Код: sql
1.
perMonthPayment = nround(allPayment /12);



Вопрос, правда, в том, не является ли это преждевременной оптимизацией -
а то м.б. лучше использовать BigDecimal и не мучатся.

Но у меня проект был тестовым на тему "насколько java быстра", поэтому я
выжимал все соки :)

--
Алексей
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325640
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonBasil A. Sidorov, 18 десятичных цифр - не вариантПлохо вам.Откуда у MS-SQL и Oracle в decimal, numeric, number появилось действующее
ограничние в 38 десятичных разрядов. Думаю что эта цифра не с неба упала.Ну ограничение (какой-то стандартной) реализации.
Похоже на "long два разА" - вполне разумный компромисс между "надо много" и "надо быстро".
В REXX я ставил "numeric digits 2000" и вполне быстро получал ответ из этих самых тысяч цифр. Арифметика там именно десятичная. Пределом (по исчерпанию системных ресурсов), в моём случае, было что-то около четырёх тысяч цифр.
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325644
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_Samara
Вопрос, правда, в том, не является ли это преждевременной оптимизацией -
а то м.б. лучше использовать BigDecimal и не мучатся.

Но у меня проект был тестовым на тему "насколько java быстра", поэтому я
выжимал все соки :)



Сравнивал BigDecimal и свой результат? Насколько выигрыш получил?

Меня пока BigDecimal устраивает, сейчас не слишком большие объемы вычислений.
По сравнению с вытаскиванием из базы мизер, насколько я помню (проект давнишний).

Я так на будущее, может соломку где заранее подстелить...
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325649
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ещё вариант с упаковкой девяти десятичных цифр в int32 как "три группы по десять бит".
Вроде даже стандартизирован.
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325659
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, sanBez!

> Сравнивал BigDecimal и свой результат? Насколько выигрыш получил?

Нет, не успел. Кризис настал, проект свернулся.

> Меня пока BigDecimal устраивает, сейчас не слишком большие объемы
> вычислений.
> По сравнению с вытаскиванием из базы мизер, насколько я помню (проект
> давнишний).
>
> Я так на будущее, может соломку где заранее подстелить...

Опиши Num extends BigDecimal, а если надо -
поменяешь на Num extends Long.

--
Алексей
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325668
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ REXX я ставил
Ради интереса - в каком году это было?
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325688
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_SamaraОпиши Num extends BigDecimal, а если надо -
поменяешь на Num extends Long.


А зачем тогда при BigDecimal аналог твоего nround ? Тут так напрямую не очень красиво выйдет.

Ладно, придут проблемы, тогда и буду решать. А пока не стоит заниматься преждевременной оптимизацией :)
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38325694
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪРади интереса - в каком году это было?Район нулевых. С разбросом на пару лет в обе стороны.
Что-то вроде AMD K6-2/300МГц/32Мб или 64Мб. OS/2.
Считался, если правильно помню, факториал пятидесяти. Естественно, в цикле, а не рекурсивно.
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38327392
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokеще топикстартеру можно загуглить ieee-754 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1033182&msg=14523312
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38327394
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
из всех присуцвующих только Basil A. Sidorov говорит дело о длинном лонге
...
Рейтинг: 0 / 0
Арифметика Джавы. WTF?
    #38331459
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. А где есть?

Ну, не знаю... Transact SQL, Pl/SQL, С++ (в виде пользовательского типа, как расширение), common lisp, python

2. Что ещё предложите встроить?

Предложу разрешить расширять Javа своими типами, как в С++, common lisp, python, C#,
это как минимум.

А так замечу, что Java -- язык для программирования бизнес-логики корпоративных приложений. Это по факту.
По рождению -- конечно, это язык для программирования утюгов и холодильников, в таком языке, безусловно, точная десятичная арифметика не нужна. А вот в языке для программирования бизнес-логики корпоративных приложений обязана быть поддержка для
точной десятичной арифметики, встроенная.
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 2 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Арифметика Джавы. WTF?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]