所有C数学函数的名称似乎都可以理解,但是我找不到fdim首字母缩略词的含义。 (fdim计算两个浮点输入的正差)。
答案 0 :(得分:4)
我搜索了ISO-C工作组的document archive,并注意到,大多数将浮点数增强到C99的提议都是由Jim Thomas贡献的。尽我所知,fdim
早在1996年就已包含在新标准草案中,很遗憾,该档案馆没有提供从那时起提案的电子副本的链接。
因此,我直接通过电子邮件与托马斯先生联系,并收到了答复,在得到他许可的情况下,我在此引用了相关部分:
来自:吉姆·托马斯
致:Norbert Juffa
时间:2020年2月15日星期六8:42 AM
主题:Re:ISO-C99中fdim()函数的命名和原理
[...]
C fdim函数是Fortran DIM(正差)函数的C版本。 C函数及其名称是供程序员从Fortran到C的移植代码的。
这确认了与注释中提到的Fortran的联系。至于DIM
本身的名称,Ctx's answer不仅解决了这一问题,而且在次要功能已经存在了50年的情况下,人们也希望这样做。
在问题下方的评论中,Mark Dickinson指向Fortran 66 standard,在第23页上,Fortran的DIM
函数定义为a₁-Min(a₁,a2)。这提供了进一步的证据,证明名称DIM
是 DI 的缩写和 M 的缩写。
答案 1 :(得分:3)
我的猜测是,它是由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)的函数。
因此,函数名称是从此处的 difference 和 minimum 派生的。参见F77 DIM manual
答案 2 :(得分:1)
为此,我找不到任何好的已发布的第一手资料。 fdim
首次出现在C99中,而C99基本原理(7.12.12)仅提到了这一点:
fmax,fmin和fdim的名称具有f前缀以允许 以fabs和abs为例的扩展整数版本。
但是我们已经可以猜到很多,f
代表浮点数。
类似地,f
中的最后一个fdimf
代表float
,l
中的最后一个fdiml
代表long double
。这些前缀/后缀字母通常在标准库中使用。