Я не уверен, как справляться с исключениями с плавающей запятой в C или С++. Из wiki существуют следующие типы исключений с плавающей запятой:
IEEE 754 specifies five arithmetic errors that are to be recorded in "sticky bits" (by default; note that trapping and other alternatives are optional and, if provided, non-default). * inexact, set if the rounded (and returned) value is different from the mathematically exact result of the operation. * underflow, set if the rounded value is tiny (as specified in IEEE 754) and inexact (or maybe limited to if it has denormalisation loss, as per the 1984 version of IEEE 754), returning a subnormal value (including the zeroes). * overflow, set if the absolute value of the rounded value is too large to be represented (an infinity or maximal finite value is returned, depending on which rounding is used). * divide-by-zero, set if the result is infinite given finite operands (returning an infinity, either +∞ or −∞). * invalid, set if a real-valued result cannot be returned (like for sqrt(−1), or 0/0), returning a quiet NaN.
Это значит, что когда произойдет какой-либо из вышеперечисленных исключений, программа выйдет из строя ненормально? Или программа будет нести эту ошибку без упоминания чего-либо и, следовательно, сделать ошибку сложной для отладки?
Является ли компилятор вроде gcc способным дать предупреждение для некоторого очевидного случая?
Что я могу сделать во время кодирования моей программы, чтобы уведомить, где происходит ошибка, и какие типы это происходит, чтобы я мог легко найти ошибку в моем коде? Пожалуйста, дайте решения как в случае C, так и в С++.
Спасибо и приветствую!