谁实施 IEEE 浮点标准?语言还是 OS?

who implements the IEEE floating point standard? the language or the OS?

我听说 C 没有像 Java 那样的任何运行时机制来捕获异常。我有点困惑,例如,如何处理除以零的异常。我正在阅读 IEEE 754 浮点标准以及它如何定义除以零的异常等。所以我的问题是当我在 运行 一个程序之后得到这样的东西时:

 $ ./divby0_demo
Floating point exception (core dumped)

这是 OS/kernel 通过发送信号之类的东西(如发生错误指针取消引用时的 SEGV)来杀死我的程序(在“捕获异常”之后),还是由标准 C 库处理(我的程序链接到的 libc)?

好吧,如果你愿意,你可以直接实现它。这并非闻所未闻:曾几何时,对浮点运算的硬件支持并不常见,即使现在在嵌入式处理器中也不常见。

IEEE-754 定义了一组数据类型及其解释,以及一组操作及其规则。这些的实现都可以在处理器中完成;在编译器生成的代码序列中;在应用程序使用的库中;或在应用程序本身中。在最常见的情况下,职责在处理器(直接实现许多常见操作)、编译器(实现几个)和库(实现其余部分)之间分配。

当程序因浮点异常错误而崩溃时,这主要是处理器造成的。它检测错误并通过生成特定的中断信号通知 OS。 (OS、编译器、库、and/or 应用程序可能已将 CPU 置于生成中断信号的模式,而不是忽略这种情况并产生 NaN 结果;这更实现特定的事情。) OS' 唯一真正的参与是正式终止程序并打印错误消息。 (OS 是 而不是 试图进行除法的实体。)