Что касается вашего примера, вам не нужно выходить из pdb и изменять код. Вы можете войти в функцию (с 's') и установить weekday_index = 0 внутри.
Одним из решений вашей исходной проблемы является использование команды перехода отладчика следующим образом:
Это сработало, когда я попробовал, но отладчик жаловался, когда я попытался сделать шаг 3 до шага 2 по какой-то причине.
Можно ли быть, должен запуститься с замены = (1/b) * c с = c/b? Это не 10x, но тем не менее что-то.
На вашем месте, я создал бы свой собственный класс Деньги, которые сохранят длинные доллары и длинные центы, и сделают математику в ней.
Имел подобную проблему к этому в торговой системе акции назад в 99. В очень запускаются дизайна, мы принимаем решение иметь каждое число в системе, представленной, как длинное, умноженное на 1000000 таким образом 1.3423, было 1342300L. Но основной драйвер для этого был следом памяти, а не производительностью прямой линии.
Одно слово на осторожности, я не сделал бы этого снова сегодня, если я не был действительно уверен, что математическая производительность была супер очень важна. В большинстве веб-приложений стандарта трясины издержки jdbc доступа и доступа к другим болотам сетевых ресурсов любое преимущество наличия действительно быстрой математики.
Возможно, необходимо ли изучить получение аппаратно ускоренных десятичных систем счисления?
Действительно ли JNI является возможностью? Можно быть в состоянии восстановить некоторую скорость и потенциально усилить существующие собственные библиотеки фиксированной точки (возможно, даже некоторый SSE* совершенство также)
, Возможно http://gmplib.org/
Можно ли обеспечить больше понимания относительно цели вычисления?
, Что Ваш контакт с является компромиссом между скоростью и точностью. Как большое желание потеря в точности быть, если Вы переключились на примитив?
я думаю в некоторых случаях, что пользователь может быть доволен меньшей точностью в обмен на скорость, пока они могут заточить в на точном вычислении при необходимости. Это действительно зависит от того, для чего Вы будете использовать это вычисление.
, Возможно, можно ли позволить пользователю предварительно просматривать результат быстро с помощью, удваивается, и затем запросите более точное использование значения BigDecimal, если они желают?
1/b не является точно представимым с BigDecimal также. См. документы API, чтобы разработать, как результат округлен.
не должно быть также трудно записать Ваш собственный фиксированный десятичный класс, базирующийся вокруг длинного поля или два. Я не знаю никого соответствующего от библиотек полки.
Какую версию JDK/JRE Вы используете?
Также Вы могли бы попробовать ArciMath BigDecimal, чтобы видеть если их скорости это для Вас.
Редактирование:
я не забываю читать где-нибудь (я думаю, что это был Эффективный Java), что класс BigDecmal был изменен от того, чтобы быть JNI, названным к библиотеке C ко всему Java в какой-то момент..., и это стало быстрее от этого. Таким образом, могло случиться так, что любая библиотека произвольной точности, которой Вы пользуетесь, не собирается получать Вас скорость, в которой Вы нуждаетесь.
Лично, я не думаю, что BigDecimal идеален для этого.
Вы действительно хотите реализовать свой собственный Денежный класс с помощью longs внутренне для представления самой маленькой единицы (т.е. цент, 10-й цент). Существует некоторая работа в этом, реализовывая add()
и divide()
и т.д., но это не действительно настолько твердо.
Я не забываю посещать представление продаж от IBM для аппаратно ускоренной реализации BigDecimal. Таким образом, если Ваша целевая платформа является System z IBM или Системой p, Вы могли бы использовать это беспрепятственно.
следующая ссылка могла бы быть несколько полезной.
http://www-03.ibm.com/servers/enable/site/education/wp/181ee/181ee.pdf
Обновление: Ссылка больше не работает.
Вы могли бы хотеть переместиться в математику фиксированной точки. Просто ища некоторые библиотеки прямо сейчас. на фиксированной точке sourceforge я подробно еще не посмотрел на это. beartonics
Вы тестировали с org.jscience.economics.money? так как это гарантировало точность. Фиксированная точка только будет так же точна как # битов, присвоенных каждой части, но быстра.
Сохраните longs как количество центов. Например, BigDecimal money = new BigDecimal ("4.20")
становится long money = 420
. Просто необходимо не забыть к модификации 100 получать доллары и центы для вывода. Если необходимо отследить, скажем, десятые части цента, это стало long money = 4200
вместо этого.
Принятие Вас может работать к некоторой произвольной, но известной точности (скажите, что одна миллиардная цента), и имеют известное максимальное значение, которое Вы должны обработать (триллион триллионов долларов?) можно записать класс, который хранит то значение как целое число миллиардных частей цента. Вам будут нужны два longs для представления его. Это должно быть, возможно, в десять раз более медленно, чем использующий дважды; приблизительно сто раз с такой скоростью, как BigDecimal.
большинство операций просто выполняет операцию на каждой части и перенормализацию. Подразделение немного более сложно, но не очень.
ответ EDIT:In на комментарий. Необходимо будет реализовать операцию сдвига разряда на классе (легкий как вперед, поскольку множитель для верхнего уровня долго является питанием два). Чтобы сделать подразделение смещает делитель, пока это не не совсем больше, чем дивиденд; вычтите сдвинутый делитель из дивиденда и увеличьте результат (с соответствующим сдвигом). Повториться.
РЕДАКТИРОВАНИЕ AGAIN:You может найти, что BigInteger делает то, в чем Вы нуждаетесь здесь.
Большинство двойных операций дает Вам более чем достаточно точности. Можно представить $10 триллионов с точностью цента с двойным, который может быть более чем достаточно для Вас.
Во всех торговых системах я продолжил работать (четыре различных банка), они использовали дважды с соответствующим округлением. Я не вижу оснований для использования BigDecimal.
Only 10x performance increase desired for something that is 1000x slower than primitive?!.
Добавление немного большего количества оборудования могло бы быть дешевле (учитывая вероятность наличия валюты погрешность расчета).