c – 没有FPU时浮点数会发生什么变化?
如果使用C语言编写没有FPU的微处理器,编译器会在遇到浮点文字和关键字(0.75,浮点数,双精度等)时发出错误信号?
此外,如果表达式的结果是小数,会发生什么? 我知道有一些软件库可供使用,因此你可以进行浮点数学运算,但我特别想知道如果你没有使用它会得到什么结果. 谢谢. 解决方法
实现float和double类型以及涉及它们的算术表达式需要C实现.因此,如果编译器知道目标体系结构没有浮点运算,那么它必须引入一个软件库来完成它.允许编译器链接外部库,它也允许在软件中实现浮点操作本身作为内在函数,但它必须以某种方式生成代码才能完成它.
如果它没有这样做[*]那么它不是一个符合C的实现,所以严格来说你不是“使用C语言编程”.您可以使用编译器文档告诉您的任何内容进行编程. 您希望涉及float或double类型的代码将无法编译(因为编译器知道您处于不符合模式并告诉您)或者无法链接(因为编译器会发出对仿真例程的调用)库,但缺少图书馆).但就C而言,如果你使用不是C的东西,那么你就是你自己. 我不知道确切的细节(我看起来多大了?),但我想,如果你为x87编译了一些代码,那么你可能能够在使用x86的系统上链接和加载它没有FPU.然后当你试图执行它时,CPU会抱怨非法指令 – 很可能系统会根据你运行的操作系统而挂起.所以最糟糕的情况是非常糟糕的.
表达式的实际结果无关紧要,因为表达式本身要么用整数运算执行(在这种情况下结果不是小数),要么用浮点运算执行(在这种情况下,问题出现之前你甚至找不到结果). [*]或者如果你没有指定选项让它这样做;-) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |