проблемы с вычислениями
От: Pavel Dvorkin Россия  
Дата: 19.10.04 09:04
Оценка: 9 (3) :))) :))) :)
Я — программист.

Приходит как-то ко мне клиент, написал, говорит, программку, хотелось бы
посчитать. Беру. Программа небольшая. Что, спрашиваю, — она должна
выдавать? Да немного, говорит, одно число. Смотрю в программку —
каменный век. Эпоха каменного рубила. Учились, спрашиваю, сами? Опустил
глаза клиент и говорит — по книжкам.

Засадил я этот бред на следующий день в машину, она помигала с минуту и
напечатала 0.40000023E01. В переводе на русский язык — это 4,0000023.
Странное, однако, число. Не ошибка ли счета набежала? Все ж машина,
смотрю, шестьдесят девять с хвостиком секунд трудилась, а она, между
прочим, у нас не на счетах косточки кидает. Семьдесят секунд времени
процессора — это почти сто миллионов операций. Посчитал с двойной
точностью. Выдала 0.40000022E01. Ну что же, вполне разумное уточнение.
Значит не ошибка вычисления.

Забавным мне это показалось, стал я в программе разбираться. Понятно
ведь, что у неизвестно какой задачи ответ может быть любой. Но если он
от целого числа на две миллионные отличается, то возникает естественное
подозрение, что ответ и должен быть целым. А отличие — какая-то
погрешность.

В программе я, конечно, разобрался, особых хитростей в ней не нашел.
Двойные ряды товарищ суммировал, и чего там только не было — и
гиперболические функции и бесселевы. Подозрительным мне все это
показалось. Позвонил знакомому математику. Тот посмотрел в книжки и
говорит — нету твоих рядов в книжках, подожди часок, я их сам пообдумаю.
Через два часа звонит — ряды твои, говорит, можешь забирать. Но я
уговорил его приехать. Посмотрел он распечатки и сразу стал серьезным.
До утра мы с ним просидели. Все верно, а двадцать две десятимиллионные
все же возникают. В шесть утра он кофе допил, встал и говорит — домой
поеду, мне к десяти в институт надо. А это ошибки вычислений набегают,
можешь быть уверен. И уехал.

Через день ко мне заказчик зашел, ответ я ему сообщил. Он спасибо сказал
и отчалил. Больше я его не видел. Задачки свои можете ко мне смело
нести, я программист не из последних. А ту программу я еще не раз
пускал. И на машинах с большой разрядной сеткой, и с двойной точностью,
и ошибки в ней искал, и другим показывал, программистам и математикам.
Ответ уточнил — 4,00000223. Это уж железно.

А вы думали — если двойку на двойку умножить, сколько будет?

--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.9 gamma
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.