Предположим, что некоторые исследователи разработали способ анализа данных, и они разработали для этого алгоритм. В то время алгоритм описан в книге, используя множество математических формул.Кто несет ответственность за точность?
Теперь алгоритм должен быть реализован в программном обеспечении. Разработчик может читать формулы и начать перевод, например. Sum(f(x)) [1..n]
(кажется, TeX здесь не допускается)for
петля.
В зависимости от того, как разработчик преобразует формулу в код, в операциях с плавающей запятой могут быть переполнения или усечения. Не зная о реальных входных значениях, модульные тесты не могут обнаружить эти проблемы. Однако в некоторых случаях этого можно избежать, просто переупорядочив элементы или упростив условия.
Интересно, кто несет ответственность за точность вывода. Это математик или он разработчик? Математик может не знать достаточно о форматах номеров компьютеров, в то время как разработчик может не знать достаточно о математике для реструктуризации формулы.
Простой пример:
Учитывая Binomial coefficientn over k
что переводится n!/(k! (n-k)!)
.
Простая реализация будет, вероятно, использовать функцию факториала, а затем ввод число непосредственно (псевдо-код):
result = fac(n)/(fac(k) * fac(n-k))
Это может привести к переполнению для увеличения п. Зная это, можно разделить n! by k! первый и делать (псевдокод):
result = 1
for (i = k+1 to n) result *= i
result = result/fac(n-k)
который является) быстрее, потому что требует меньше вычислений и б) не страдает от переполнения.
Взаимодействие между математиками и программистами является ключевым. И обратите внимание, что 13! переполняет 32-битное целое число: не особо большое. – Bathsheba
Ваш пример не имеет ничего общего с точностью. Целые числа точны, числа с плавающей запятой - нет. Существуют проблемы точности, присущие числовым алгоритмам, тогда как проблемы с целым размером всегда могут быть решены путем увеличения целочисленного размера. –
Вот почему, ИМХО, хороший программист * должен * иметь прочную основу в математике. Одно дело - перетаскивать виджеты для создания графического интерфейса или что-то в этом роде, совсем другое дело, чтобы иметь возможность читать исследовательскую статью, например. новый алгоритм сжатия изображений и возможность правильно кодировать что-либо на основе теоретических математических конструкций в рамках ограничений аппаратного обеспечения с конечной точностью. – twalberg