Поддерживает ли JVM только правильное подмножество необходимых функций IEEE 754?


person bmillare    schedule 08.09.2011    source источник


Ответы (2)


Да, это относится ко всем языкам JVM. Глобальных флагов просто нет. Нет, это никак не исправить.

Что еще более важно, нет, вы не должны. Хотя профессор Кахан может быть экспертом в области численных вычислений, он не занимается разработкой программного обеспечения. Он также не может предсказывать будущее. Глобальное состояние FP — очень плохая идея в современном многоядерном мире. Для соответствия вы должны искусственно объединить состояние FP каждого потока в одно глобальное состояние, и тогда вы больше не сможете надежно справляться с отдельными ошибками, поэтому вам просто нужно выручить. Просто прекрасно.

person MSalters    schedule 08.09.2011
comment
Профессор Кахан знает о разработке программного обеспечения гораздо больше, чем ему приписывают в галерее арахиса. Он всегда совершенно ясно говорил о том, что глобальное состояние — это лишь один из многих возможных способов удовлетворить требования IEEE-754. К сожалению, это не остановило других от неправильного истолкования его статей на эту тему. Обсуждение флагов также является лишь небольшой частью связанных документов; там содержится много других (лучших) моментов для тех, кто может удосужиться их прочитать. - person Stephen Canon; 08.09.2011
comment
Ну, то же самое я могу сказать и о его классе воображения. На самом деле нет никакой разницы в реализации между нотациями x + ı*y и (x,y). Реализация — это биты; нотация является текстовой, и любой первокурсник должен быть в состоянии написать преобразование между двумя текстовыми форматами. Он также неправильно понимает катастрофу Ariane V. Он делает вид, что это сработало бы с логикой IEEE754; на самом деле это просто сообщало бы о том же переполнении другим способом. Ракета была бы взорвана так же, если бы исключение переполнения было битом переполнения; это было 100% по дизайну. - person MSalters; 08.09.2011
comment
Ключевым моментом предложений Каана для класса Imaginary является не синтаксис, используемый для его представления, а то, что вы можете получить правильный результат в определенных случаях, когда на самом деле невозможно получить правильный ответ, если у вас есть только Типы Real и Complex (по крайней мере, не без создания собственных реализаций Imaginary и Complex). Я могу найти в этом документе много вещей, с которыми можно поспорить, но вы не можете просто отмахнуться от него. - person Stephen Canon; 08.09.2011

Если вы хотите использовать специфические аппаратные функции, которые не использует JVM, вам, вероятно, потребуется использовать C или сборку и вызывать их через JNI. Большая часть вашего кода все еще может быть на Java, но он не должен решать все.

Примечание: если вы делаете это по соображениям производительности, вы должны быть осторожны, чтобы ваше «улучшение» на самом деле не было медленнее (иногда намного медленнее)

person Peter Lawrey    schedule 08.09.2011