gpt4 book ai didi

c - ceil()和floor()的实现

转载 作者:行者123 更新时间:2023-11-30 17:50:08 26 4
gpt4 key购买 nike

只是好奇这些是如何实现的。我看不到我应该从哪里开始。它们直接在float / double的位上工作吗?

在哪里也可以从math.h中找到函数的源代码?我发现的只是带有原型的标头或带有从其他地方调用其他函数的函数的文件。

编辑:编辑标题后,部分消息丢失了。我特别指的是ceil()floor()函数。

最佳答案

如果您有兴趣查看此类算法的源代码,那么fdlibm-最初来自Sun的“ Freely Distributable libm”以及Java数学库的参考实现-可能是一个不错的选择开始。 (对于临时浏览,肯定是比GNU libc更好的起点,在core of the implementation of log()中,片段分散在各个子目录中-math/sysdeps/ieee754/等。)

fdlibm假定它正在使用IEEE 754格式double,并且如果您查看实现,例如SoftFloat,您会发现它们使用了各种巧妙的技巧,通常同时使用这两种标准double算术和double的位表示的知识。

(如果您对支持基本IEEE 754浮点算法的算法感兴趣,例如可能用于不支持硬件浮点的处理器,请查看John R. Hauser的ceil()。)



至于您的编辑:通常,floor()frndint可能很容易在硬件中实现;例如,在x86上,GCC(启用优化)使用s_ceil.c指令生成代码,并适当摆弄FPU控制字以设置舍入模式。但是fdlibm的纯软件实现(s_floor.c )可以直接使用位表示形式工作。

关于c - ceil()和floor()的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17441218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com