gpt4 book ai didi

在非 IEEE 浮点实现中更改尾数的宽度

转载 作者:行者123 更新时间:2023-12-02 03:32:31 27 4
gpt4 key购买 nike

我在 18 位软核处理器目标上有一个 gcc 交叉编译器定义了以下数据类型:18 位整数、36 位长整型和 36 位 float (单精度)。现在我的重点是浮点运算。由于宽度是非标准(36位),我有以下方案:27位尾数(尾数),8 位指数和 1 位符号位。我可以看到宽度是在 float.h 文件中定义的。感兴趣的我是以下人员:FLT_MANT_DIG 和 FLT_DIG。它们被定义为:

FLT_MANT_DIG 24FLT_DIG 6

我已经把它们改成了

FLT_MANT_DIG 28 FLT_DIG 9

按照我在 float.h 中的要求,然后构建 gcc 编译器。但我仍然得到 32 位浮点输出。有没有人有经验实现非标准单精度 float 和/或知道解决方法?

最佳答案

高效的 float 学需要设计为支持正在使用的精确浮点格式的硬件。在没有这样的硬件的情况下,围绕特定浮点格式设计的例程将比容易适应其他格式的例程更有效。 GCC 编译器和提供的库旨在与 IEEE-754 浮点类型高效运行,并不特别适用于任何其他类型。上述 header 的存在不允许程序员请求特定的浮点格式,而只是通知代码将使用什么格式。

如果您不需要 72 位浮点类型,并且如果编译器的 double 类型将以类似合理的方式执行 64 位数学,即使 long 是 36 位而不是 32 位,您可以安排一些事情,以便将 float 值解压缩为一个四字 double,使用它执行计算,然后重新排列double 的位产生一个float。或者,您可以编写或查找 36 位浮点库。我不会特别期望 GCC 或其库包含这样的东西,因为现在 36 位处理器相当少见。

关于在非 IEEE 浮点实现中更改尾数的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25783375/

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