Что означает аббревиатура fdim? - PullRequest
4 голосов
/ 14 февраля 2020

Все C математические функции имеют понятное имя, но я не могу найти то, что означает аббревиатура fdim. (fdim вычисляет положительную разницу двух входных данных с плавающей запятой).

Ответы [ 3 ]

4 голосов
/ 15 февраля 2020

Я искал в архиве рабочей группы *1001* рабочей группы ISO- C и заметил, что большинство предложений по усовершенствованию с плавающей точкой того, что станет C99, было сделано Джимом Томасом. Насколько я могу судить, fdim был включен в проект нового стандарта до 1996 года, и, к сожалению, в архиве нет ссылок на электронные c копии предложений того времени.

Поэтому я связался с г-ном Томас напрямую по электронной почте и получил ответ, соответствующую часть которого я цитирую здесь с его разрешения:

От: Джим Томас
Кому: Норберт Джуффа
Время: сб 2/15 / 2020 8:42
Тема: Re: Именование и обоснование функции fdim () в ISO-C99
[...]
Функция fdim C - это C версии для функции Fortran DIM (положительная разница). Функция C и ее название были предназначены для программистов, портирующих кодовую форму Fortran на C.

Это подтверждает связь с Fortran, на которую ссылаются в комментариях. Что касается самого имени DIM, то ответ Ctx касается этого также, на что можно было бы надеяться в случае второстепенной функции, которая существовала уже пятьдесят лет.

В комментариях ниже Марк Дикинсон указал на стандарт Fortran 66 , который на стр. 23 определил функцию DIM Фортрана как a₁ - Min (a₁, a₂) . Это является еще одним доказательством того, что название DIM является сокращением DI разницы и M минимум.

3 голосов
/ 14 февраля 2020

Я предполагаю, что это композиция из difference и max, потому что это то, что делает функция.

Псевдокод

double fdim(x, y) { 
    float    tmp = x - y;        // 1st step: "di"fference
    float result = fmax(tmp, 0); // 2nd step: "m"aximum
    return result;
}

Та же номенклатура для пример с fma(a, b, c), что означает «умножить» и «добавить» (a*b+c)

Редактировать:

Функция действительно произошла еще раньше в Fortran , где функция DIM(number, number) определена как

Функция, которая возвращает значение первого аргумента минус минимум (MIN) двух аргументов.

таким образом, имя функции получено из разница и минимум здесь. См. Руководство F77 DIM

1 голос
/ 14 февраля 2020

Я не могу найти хороший опубликованный первый источник для этого. fdim впервые появился в C99, и в обосновании C99 (7.12.12) упоминается только следующее:

Имена для fmax, fmin и fdim имеют префиксы f, позволяющие использовать целочисленные версии расширений, следующие примеру о невероятных и абс.

Аналогично, последний f в fdimf обозначает float, а последний l в fdiml обозначает long double. Эти префиксные / постфиксные буквы обычно используются в стандартных библиотеках.

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