Кунен, специалист в области вещественных вычислений, заявил, что Java-приложения на настольных системах Pentium и PowerPC показали слабые точность и скорость вычислений. Джой с ним не согласился. Трудно сказать, кто из них прав, но до сих пор Кунен считался специалистом по этому вопросу.

За две недели до диспута в статье "A Note on Java Numerics" ("Заметки о вычислениях в Java"), размещенной компаниями Intel и Microsoft на своих Web-серверах, он утверждал, что Java инициирует дополнительный шаг в работе процессора и этим нарушает точность вычислений с плавающей точкой на Intel Pentium, который, как и Apple PowerPC, работает медленно и с погрешностями. Причем программы, работающие на процессорах SPARC компании Sun Microsystems и MIPS производства Silicon Graphics, выполняются точно.

Нет ничего удивительного в том, что Java хорошо работает на SPARC-станциях, потому что этот язык создавался в операционной среде Sun. В свое время корпорация Sun представляла Java в качестве платформенно-независимого мобильного программного обеспечения. Можно поверить, что Java - мобильная технология, но едва ли она так же стойко, как Швейцария, сохраняет нейтралитет.

Джой, напротив, считает, что Java-программы дают одни и те же результаты на всех системах, написанных для мощных компьютеров, следовательно, и на персональных компьютерах результаты будут точны.

Хорошо сказано, но это не может быть аргументом в полемике. Так, Кунен утвердительно ответил на вопрос, может ли компьютер на базе Pentium дать более точный результат, исполнив не Java-программу. Свой ответ он подтвердил математически точным примером, который, к сожалению, был приведен только на бумаге.

Джой согласился, что вещественная арифметика для языка Java создавалась для 32- и 64-разрядных внутренних операций. В арифметических устройствах микропроцессора Pentium используются 80-разрядные операции. "Результаты должны быть конвертированы в 64-разрядное представление после каждой операции, но не для того, чтобы получить меньшую точность, а для того, чтобы все машины давали одинаковый результат", - признал Джой. Он заметил, что самые большие, с высокой производительностью серверы не применяют внутренней 80-разрядной арифметики. Джой указал на различие между Unix-сервером и настольной системой на платформе Wintel.

Продолжая дискуссию, Кунен предложил корпорации Sun доработать Java так, чтобы операции с плавающей точкой более точно соответствовали рекомендациям IEEE. На это Джой ответил, что 80-разрядный формат для данных при программировании на таких языках, как Fortran или Java, не предусмотрен IEEE-стандартом. Джой сообщил, что представители компании Sun объяснили Intel потребности пользователей, а в дальнейшем намерены настаивать на доработке последующих версий процессора Intel и включении аппаратной поддержки, которая ускорила бы выполнение вещественных вычислений в Java-программах.

Можно поверить, что точность вещественных вычислений в некоторых Java-программах, запускаемых на персональных компьютерах, приносится в жертву единообразию. Это как раз и сделано, так как на языке Sun единообразие равносильно переносимости.

Вполне понятно, что в мире компьютерных сетей переносимость приобретает новое значение, но точность вычислений важнее их универсальности.


Чарльз Бабкок - редактор журнала Computerworld. Его адрес в Internet - charles_babcock@cw.com.

Поделитесь материалом с коллегами и друзьями