2015-11-02 2 views
0

Недавно я узнал, что groovy использует реализации NumberMath для вычисления математических вычислений.Как работает ручная работа в режиме runtime?

Итак:

BigDecimal x = 1.0/30.0 

Использует BigDecimalMath.java, чтобы установить точность и масштаб. Я только что узнал об этом на one of the posts here in stackoverflow. Но я все еще озадачен тем, как это работает.

Итак, как это работает вообще? И есть ли там документация о рутинном управлении временем или о подобных?

+0

Не уверен, что вы имеете в виду? –

+0

@tim_yates Я имею в виду, как они учитываются? Добавлены ли они во время выполнения? – froi

+0

Извините ... что добавлено в Runtime? –

ответ

2

Код BigDecimal x = 1.0/30.0 скомпилирован компилятором Groovy и может там, конечно, легко испускать код, который будет вызывать во время выполнения. Если мы откажемся от кэширования callsite и всей логики вызова, то произойдет то, что вызывается NumberMath # getMath. Этот метод решает использовать типы операндов, какую математическую реализацию использовать. Затем информация об операции появляется позже как имя вызова метода с сайта вызова. Поскольку 1.0 и 30.0 являются BigDecimal в Groovy (суффикс D или d, чтобы сделать его двойным), BigDecimalMath # divideImpl будет использоваться в конце. Затем этот метод вызывает BigDecimal # divide. Поскольку для данного выражения требуется BigDecimal бесконечной длины, устанавливается масштаб и точность, которая является максимальным числом операндов и 10 и режимом округления по умолчанию. Что касается тех, кто выбирает типы ... это делается в классах реализации сайта вызова на основе реальных объектов, используя getClass(), иногда используется статическая информация, если предполагается, что время выполнения и статический тип являются некоторыми (подсказками: final classes).

+0

Спасибо за ответ, это было очень полезно. Можете ли вы указать мне какую-то документацию об этом, чтобы я мог больше узнать? – froi

Смежные вопросы