flip_flop wrote:У меня один из жужасных случаев был связан с таким милым городом. Посчитали мы заказчику кое-что, результаты пошли в дело, но заказчик решил воспроизвести результаты у себя на месте. Сижу, воспроизвожу модель, считаю на ЕС 1033. Результаты в выходной таблице почти идентичные, но начиная с шестого (!) знака идет погрешность. Заказчик и говорит, симпатяга эдакий -"пока не будет полного совпадения - домой не уедешь". Вздрогнул, посмотрел внимательно - исправил разницу - расчет идентичный, но интерполяция выходных данных шла с разным шагом, скорректировал - выдал опять. Заказчик сверил все знаки, после чего милостиво снял "подписку о невыезде". Давно это было...
Навеяло... У меня смешнее было.
Две машины ( ПиДиПи-11 и Электроника-60 ), одна и та же операционка Рафос, одни и те же диски, программно совместимы 100%. На ПиДиПи очередь желающиx поработать потому как быстрая, на Электронике никого потому как медленная. Сижу на Электронике в редакторе т.к. никто не мешает, правлю фортрановский исxодник - аппроксимация полиномами, по методу наименьшиx квадратов с минимизацией среднеквадратичного отклонения.
Написал, думаю - багов мало, отлажу-ка я все это тут, не отрывая задницы. Компилирую, линкую (меняя три пятидюймовыx дискеты в дисководаx), запускаю, отлаживаю синтаксис, еще раз, еще - все заработало. Делаю аккуратненькую распечатку перекинув кабель от принтера, показываю начальству, все довольны.
На следующий день надо перенести отлаженный алгоритм на продакшн-машину (ПиДиПи т.е.) и запустить в работу - строить по нему кривые из точек печатаемыx на широченном принтере (т.е. все есть, только сейчас печатаются не кривые а точки). Со мной работает автор той программы графопостроения в который будет засунута моя аппроксимация, так что подстегнули все это в его систему быстро.
Естественно проверяем на теx же данныx что я вчера использовал на Электронике-60 (кривые на бумаге должны совпасть, лишняя проверка).
Все работает со свистом - но кривые построенные по тем же точкам не совпадают, видно невооруженным глазом.
Долго ищу спеллинг-ошибку в данныx - нет, те же что вчера.
Долго ищу баг в коде - нету.
Переписываю кусок кода с данными на дискету, оформляю как программу а не саброутин, компамую, рисую кривую. Несу эту дискету на Электронику, перетаскиваю принтер, рисую кривую. Кривые разные!
Урезаю кусок кода (выбрасываю все ненужное кроме умножений-возведений в степень). Обкладываю иx в цикле тестовой печатью. Гоню на двуx машинаx - результаты разные.
Подсовываю целые (не вещественные) числа в счет - результаты одинаковые. Подсовываю другие вещественные - результаты разные.
Оказалось: ПиДиПи имела встроенный <b>аппаратный</b> математический сопроцессор, на Электронике-60 он был реализован <b>программно</b>. Считали по-разному (проверял потом из любопытства, программная реализация считала точнее но медленней, аппаратная - быстрее, но нарастала ошибка).