C 更改尾数';非IEEE浮点实现中的s宽度

C 更改尾数';非IEEE浮点实现中的s宽度,c,gcc,floating-point,floating-point-precision,C,Gcc,Floating Point,Floating Point Precision,我有一个18位软核处理器目标上的gcc交叉编译器 已定义以下数据类型的: 整数18位、长36位和浮点36位(单精度)。 现在我的重点是浮点运算。因为宽度是 非标准(36位),我有以下方案:27位用于 尾数(有效位),指数为8位,符号位为1位。 我可以看到宽度是在float.h文件中定义的。感兴趣 我的发言如下: 飞行,飞行,飞行,飞行。 它们的定义如下: FLT_MANT_DIG 24 FLT_DIG 6 我把它们改成了 FLT_MANT_DIG 28 飞行队挖掘9 根据我在float.h中的要

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

FLT_MANT_DIG 24 FLT_DIG 6

我把它们改成了

FLT_MANT_DIG 28 飞行队挖掘9

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

高效的浮点数学需要设计为支持所使用的精确浮点格式的硬件。在没有这种硬件的情况下,围绕特定浮点格式设计的例程将比容易适应其他格式的例程效率更高。GCC编译器和提供的库设计用于高效地使用IEEE-754浮点类型,并且不特别适用于任何其他类型。前面提到的头文件不允许程序员请求特定的浮点格式,而只是通知代码将要使用的格式


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

FLT\u DIG 9
是不正确的。对于28(27显式+1隐式)位的二进制有效位,使用
FLT\u DIG 8
。"⎣(p− 1) log10b⎦" C11dr§5.2.4.2.2 11请详细说明“我仍然得到32位浮点输出。“顺便说一句:如果您的FP确实是非标准的,它可能不会使用隐含的MSBit,在这种情况下使用
FLT\u MANT\u DIG 27 FLT\u DIG 7
。你有36位FP类型的参考吗?你有向后的。
float.h
常量描述编译器其余部分采用的浮点格式,以便程序可以使用此信息。更改
float.h
对编译器本身绝对没有影响。