fdim 是什么缩写?

5
所有的C语言数学函数名称都非常易懂,但我找不到fdim的缩写代表什么。 (fdim函数计算两个浮点数输入值之间的正差)。

1
浮点数差异,忽略负号?这真的很重要吗? :-) - paxdiablo
@Lundin,我已经查阅了K&R以及C99标准,还查看了Khronos OpenCL文档以及其他各种标准,但是没有人提到这个命名。 - Pyoz_
我尝试使用我能找到的Jim Thomas在惠普公司最近的电子邮件地址联系他,但不幸的是,邮件被退回了。 - njuffa
2
DIM 是 Fortran 77 标准的一部分。猜测 C 从那里窃取了这个名字,因此您可能需要 Fortran 历史学家来找出这个名字的来源。 - Mark Dickinson
1
实际上,看起来甚至在Fortran 66标准中也有(第23页,表3,内置函数)。 - Mark Dickinson
显示剩余13条评论
3个回答

5
我在搜索ISO-C工作组的文档存档时发现,大多数关于浮点增强的提案都是由Jim Thomas贡献的。据我所知,在1996年之前的草案中已经包含了fdim,不幸的是,该存档没有提供那个时期提案的电子副本链接。
因此,我通过电子邮件直接联系了Thomas先生,并得到了回复,他同意我引用以下相关部分:

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

这证实了与Fortran的联系,如评论所述。至于名称本身,Ctx's answer在这一次对一个存在了50年的小函数做出了最好的解释。
在问题下面的评论中,Mark Dickinson指向了Fortran 66 standard,在第23页中将Fortran的函数定义为a₁ - Min (a₁,a₂)。这进一步证明了名称是fference和inimum的缩写。

@Ctx 我不仅觉得这很有趣,而且我认为保留这些计算历史的小细节非常重要。那么,谁比那些创造了这段历史的人更适合被询问呢? - njuffa

4

我的猜测是,这个函数的名称源于 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
我找不到任何好的已发布的第一手资料。在C99中首次出现了fdim,而C99的解释(7.12.12)仅提到了以下内容:
“fmax、fmin和fdim的名称具有f前缀,以便在fabs和abs的示例之后扩展整数版本。”
但我们已经可以猜到,f代表浮点数。
同样,fdimf中的最后一个f代表float,而fdiml中的最后一个l代表long double。这些前缀/后缀字母通常用于标准库中。

狂猜的话,“di” 可能意味着差异,但这并不能解释“m”。或者,“dim” 可能意味着维度,但这并不太合理。 - Lundin
我曾经希望通过查看“dim”的整数定义来找到答案,但这并没有帮助到我。 - Pyoz_
@Pyoz_ 可能没有任何解释。其中一些函数是由一只猫走过键盘时命名的。例如,以 strpbrk 为例。 - Lundin
@Lundin cppreference相信已经为这个名称提供了解释:https://en.cppreference.com/w/c/string/byte/strpbrk。根据信仰,其起源可以追溯到snobol(http://www.snobol4.org/docs/burks/tutorial/ch4.htm点4.8.4)。 - Ctx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接