【问题标题】:What does the fdim acronym stand for?fdim 的首字母缩略词代表什么?
【发布时间】:2020-02-14 13:56:09
【问题描述】:

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

【问题讨论】:

  • 浮点差,忽略减号?真的有关系吗? :-)
  • 困扰了我一段时间,到目前为止,我在所有红色文档中都找不到答案,所以这对我很重要 =)
  • 找到标准库的基本原理及其命名很像试图理解一个醉酒的人在睡梦中说话。我可以通过为您查看旧的 K&R 等来进行尝试,但我怀疑我会找到很多。
  • DIM 是 Fortran 77 标准的一部分。猜测一下,C 从那里偷走了这个名字,所以你可能需要 Fortran 历史学家来找出这个名字的来源。
  • 实际上,它看起来好像在 Fortran 66 standard 中(第 23 页,表 3,内在函数)。

标签: c math floating-point acronym


【解决方案1】:

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

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

发件人:吉姆·托马斯
致:诺伯特·朱法
时间:2020 年 2 月 15 日星期六 8:42 AM
主题:回复:ISO-C99 中 fdim() 函数的命名和基本原理
[...]
C fdim 函数是 Fortran DIM(正差)函数的 C 版本。 C 函数及其名称旨在供将代码从 Fortran 移植到 C 的程序员使用。

这证实了 cmets 中提到的与 Fortran 的联系。至于名称 DIM 本身,Ctx's answer 解决了这个问题,并且在一个已经存在了 50 年的次要功能的情况下,人们可以期待这一点。

在问题下方的 cmets 中,Mark Dickinson 指向 Fortran 66 standard,它在第 23 页将 Fortran 的 DIM 函数定义为 a₁ - Min (a₁, a₂)。这进一步证明了 DIM 这个名字是 DIfference 和 Minimum 的缩写。

【讨论】:

  • @Ctx 我觉得这不仅很有趣,而且我发现我们保留这些点点滴滴的计算历史很重要,还有谁比那些创造了这段历史的人更好?
【解决方案2】:

我的猜测是,它是 differencemax 的组合,因为这就是函数的作用。

伪代码

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) 的函数。

所以函数名是从这里的differenceminimum派生出来的。见F77 DIM manual

【讨论】:

    【解决方案3】:

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

    fmax、fmin 和 fdim 的名称有 f 个前缀以允许 以 fabs 和 abs 为例的扩展整数版本。

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

    同样,fdimf 中的最后一个f 代表floatfdiml 中的最后一个l 代表long double。这些前缀/后缀字母通常用于标准库中。

    【讨论】:

    • 疯狂推测,di 可能意味着不同,但这并不能解释m。或者dim 可能意味着维度,但这没有多大意义。
    • 我希望通过查看dim 的整数定义来找到答案,但它没有帮助..
    • @Pyoz_ 可能没有任何解释。其中一些功能是由一只走过键盘的猫命名的。以strpbrk 为例。
    • @Lundin cppreference 相信有这个名字的解释:en.cppreference.com/w/c/string/byte/strpbrk 根源被认为在 snobol (snobol4.org/docs/burks/tutorial/ch4.htm point 4.8.4)
    猜你喜欢
    • 2011-05-22
    • 2022-11-10
    • 2011-01-08
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多