2013-08-22 2 views
3

Мы находимся в процессе перехода на Scala 2.10. Кажется, мы зафиксировали все показательные пробки, но для некоторых наших численных расчетов ответы немного отличаются в небольшом числе случаев. Существуют ли какие-либо известные изменения, внесенные между 2.9.1 и 2.10.2, которые могут вызвать это или кто-либо еще видел что-то подобное раньше?Различия в численном поведении между версиями Scala

Поскольку все наши небольшие тесты проходят, это должно быть кумулятивным эффектом при итеративных вычислениях, и даже тогда это влияет только на небольшой процент случаев. Это сложные вычисления, и это единственная система их выполнения, поэтому у нас нет независимого способа проверить, какая версия правильная, а не выполнять переоценку чистой комнаты.

+0

Возможно ли запустить отладчик как версии 2.9, так и версии 2.10, чтобы попытаться отследить, какой именно расчет ведет себя по-другому? – theon

+1

I.e. можно ли разместить пример? – theon

+0

@theon, к сожалению, поскольку эффект редок и даже тогда происходит только как небольшой эффект в результате длительных кумулятивных вычислений с участием сторонних библиотек (которые мы не изменили), поэтому мы не смогли изолировать его от себя содержащий пример. Это также делает выделение источника разницы путем параллельного выполнения кода с использованием отладчика - это немного сам по себе проект. Вот почему я надеюсь, что описание высокого уровня вызовет звонок с кем-то и поможет нам сузить поиск. –

ответ

2

Извините, не могу оставлять комментарии только. Какова величина различий, которые вы видите, и какие вычисления вы делаете в своем коде? Возможно, не имеет смысла спрашивать, что правильно, это FP, в конце концов. Не могли бы вы попытаться скомпилировать свой код с помощью strictfp? Небольшие различия в генерации кода и оптимизации могут привести к различиям в том, когда/как часто 80-битные промежуточные элементы усекаются до 64 - если вы работаете в архитектуре x86. Если у вас есть доступ к оборудованию, на котором нет 80-битных регистраторов fp, вы можете попробовать запустить обе версии на этом. Даже тогда простые выражения, такие как LL + S1 + S2, где LL намного больше S1 или S2, могут давать разные результаты в зависимости от порядка добавлений.

+0

спасибо @theon, мы попробуем ваши предложения. –