Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于现代通用计算机来说,FLT_基数在C11中不是2吗?_C_Floating Point_C11 - Fatal编程技术网

对于现代通用计算机来说,FLT_基数在C11中不是2吗?

对于现代通用计算机来说,FLT_基数在C11中不是2吗?,c,floating-point,c11,C,Floating Point,C11,这几乎是我在标题中的问题。使用其他任何东西似乎都是完全不自然的 在研究这一点时,我发现有BASE10硬件支持的历史例子,以及IBMPOWER6和SystemZ9的更现代的例子。即使在这些情况下,我也不知道在任何主流C编译器上,FLT_RADIX是否为10 我特别关心的是,我正在为一个只能在通用计算机上运行的应用程序编写代码,我想知道我是否可以在没有严重顾虑的情况下静态断言FLT_RADIX==2,就像我目前静态断言!(无符号字符)256附录F是C标准中的一个“可选”部分,对于使用浮点的任何严重实

这几乎是我在标题中的问题。使用其他任何东西似乎都是完全不自然的

在研究这一点时,我发现有BASE10硬件支持的历史例子,以及IBMPOWER6和SystemZ9的更现代的例子。即使在这些情况下,我也不知道在任何主流C编译器上,
FLT_RADIX
是否为10


我特别关心的是,我正在为一个只能在通用计算机上运行的应用程序编写代码,我想知道我是否可以在没有严重顾虑的情况下静态断言
FLT_RADIX==2
,就像我目前静态断言
!(无符号字符)256

附录F是C标准中的一个“可选”部分,对于使用浮点的任何严重实现都是非可选的,它分别要求IEEE单精度和双精度(二进制32和二进制64)用于
浮点
双精度
,因此
浮点
应始终为2。在支持新的十进制浮点数的系统上,它是一个单独的扩展类型
FLT_基数==10
不用于它。

此静态断言的目的是什么?您的程序是否依赖于FLT_基数为2?如果是的话,你能解释一下你的程序的哪一部分依赖于它吗?我可以看到静态断言字符包含值0-255(包括0-255)的值,但FLT_基数断言的值对我来说是个谜。我相信IBM已经在十进制浮点格式上做了一些工作,使用10位表示3位十进制数字。它可能与二进制浮点并行存在。一些IBM大型机使用浮点格式,其中指数是16的幂而不是2;我认为这意味着
FLT\u基数==16
。(无符号char断言可以写成
char\u BIT==8
)其目的是我使用浮点类型来执行整数算术以提高性能(不是专门替换整数类型,而是在某些情况下使用浮点类型),可精确表示的整数的可用范围取决于可用的二进制位数。如果最多有3个前导零(以16为基数),考虑因素会非常复杂,如果以10为基数,考虑因素会更加复杂。@juhist:计算两个浮点数的精确和(作为“高部分”和“低部分”)的一种技术是计算
high=x+y;err=高-x;低=y-err
其中
x
是绝对值较大的和。特别是在基数为10的情况下,这是失败的——在两位数的基数为10的浮点中,取
x=y=9.9
,得到
high=20
err=10
low=-0.10
。@KeithThompson OP的版本的优点是不需要任何
#include
。这是非传统的,但我看不出有什么问题,所以IEEE标准要求二进制?我想我在附录F中遗漏了这一点,或者它可能是参考了IEEE标准本身。谢谢。当前IEEE标准也定义了非二进制类型,但这些类型不是附录F中提到的类型。F.2类型如下:“浮点类型匹配IEC 60559单格式。双格式匹配IEC 60559双格式。”术语“单”和“双”来自标准的原始版本;这些格式后来被重命名为“binary32”和“binary64”。@Kyle Stewart“IEEE标准”不需要二进制。请参见上面的评论。@chux:IEEE发布了许多标准。C11标准附录F中提到的是“微处理器系统的二进制浮点算法,第二版(IEC 60559:1989)”@chux,你的权利,我应该更具体一点,根据我的阅读,85'标准没有规定非二进制的格式,虽然它模糊地指定了两种可能不是二进制的格式(扩展单格式和扩展双格式)。然而,这些扩展类型只能应用于longdouble,而附录F并没有对此做太多说明。