gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:31:52 29 4
gpt4 key购买 nike

只是好奇这些是如何实现的。我不知道该从哪里开始。它们是否直接作用于 float 的/double 的位?

另外,我在哪里可以找到 math.h 中函数的源代码?我找到的只是带有原型(prototype)的 header 或带有从其他地方调用其他函数的函数的文件。

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

最佳答案

如果您有兴趣查看此类算法的源代码,那么 fdlibm - “可自由分发 libm”,最初来自 Sun,以及 Java 数学库的引用实现 - 可能是一个很好的起点。 (对于随意浏览,它肯定是比 GNU libc 更好的起点,其中的片段分散在各个子目录中 - math/sysdeps/ieee754/ 等)

fdlibm 假设它使用 IEEE 754 格式 double ,如果您查看实现 - 例如,core of the implementation of log() - 你会看到他们使用各种巧妙的技巧,经常混合使用标准 double double 的算术和位表示知识.

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


至于您的编辑:一般来说,ceil()floor()很可能在硬件中实现;例如,在 x86 上,GCC(启用优化)使用 frndint 生成代码适当调整 FPU 控制字以设置舍入模式的指令。但是 fdlibm 的纯软件实现( s_ceil.c s_floor.c )确实可以直接使用位表示。

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

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