4

所有 C 数学函数似乎都有一个可以理解的名称,但我找不到 fdim 首字母缩写词代表什么。(fdim 计算它的两个浮点输入的正差)。

4

3 回答 3

4

我搜索了 ISO-C 工作组的文档存档,并注意到大多数关于对后来成为 C99 的浮点增强的提案都是由 Jim Thomas 贡献的。据我所知,fdim它已包含在 1996 年之前的新标准草案中,不幸的是,该档案没有提供指向当时提案的电子副本的链接。

因此,我通过电子邮件直接联系了 Thomas 先生并收到了回复,我在此引用了相关部分并征得他的同意:

发件人:Jim Thomas
收件人:Norbert Juffa
时间:2020 年 2 月 15 日星期六上午 8:42
主题:回复:ISO-C99 中 fdim() 函数的命名和基本原理
[...]
C fdim 函数是Fortran DIM(正差)函数的 C 版本。C 函数及其名称旨在供将代码从 Fortran 移植到 C 的程序员使用。

这证实了评论中提到的与 Fortran 的联系。至于名称DIM本身,Ctx 的回答解决了这个问题,并且在一个已经存在了 50 年的次要功能的情况下,人们可能希望这样做。

在问题下方的评论中,Mark Dickinson指出了Fortran 66 标准,该标准在第 23 页将 Fortran 的DIM函数定义为a₁ - Min (a₁, a₂)。这进一步证明该名称DIMDI fference和Minimum 的缩写。

于 2020-02-15T18:13:51.397 回答
3

My guess is, that it is a composition from difference and max, because this is what the function does.

Pseudo-code

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

Same nomenclature for example with fma(a, b, c), which means "multiply" and "add" (a*b+c)

Edit:

The function indeed occurred even earlier in Fortran, where the function DIM(number, number) is defined as

A function that returns the value of the first argument minus the minimum (MIN) of the two arguments.

so the function name is derived from difference and minimum here. See the F77 DIM manual

于 2020-02-14T14:41:05.363 回答
1

我找不到任何好的已发布的第一个来源。fdim最早出现在 C99 中,C99 的基本原理(7.12.12)只提到了这一点:

fmax、fmin 和 fdim 的名称具有 f 前缀,以允许遵循 fabs 和 abs 示例的扩展整数版本。

但我们已经猜到了,f浮点数的代表。

同样,最后一个finfdimf代表float,最后一个linfdiml代表long double。这些前缀/后缀字母通常用于标准库中。

于 2020-02-14T14:17:37.880 回答