我有两个控制台应用程序(msvc 2008)。当他们除零时, 他们的行为不同。我的问题如下。
a)在一个应用程序中,除以零的结果显示为1.#INF000000000000作为调试器 Printf“%4.1f”将其打印为“1。$”。
b)在另一个应用中,调试器中除以零的结果为9.2559631349317831e + 061。
Printf“%4.1f”将其打印为“-1。$”。
Why
应用程序都没有异常或div上的信号为零?
不是异常/信号是默认的dehavour吗?
上面两个常量的define
名称是什么?
一般来说,如果我在div之前检查分母== 0,那么我将使用哪个define
值作为虚拟结果? DBL_MIN好吗?我发现NaN值不是。
我可以告诉stdio如何将一个特定的double值格式化为char字符串我告诉它吗?我意识到要问太多了。但是告诉stdio在我的应用程序中打印“n / a”for vaues DBL_MIN会很高兴。
我如何处理,以获得最佳的可移植性,除以零并打印出结果?通过打印,我的意思是“打印数字为'n / a',如果它是除零的结果” 这里有什么不清楚的,我怎样才能以便携的方式用一对二的方式表示div-by-zero的结果。
为什么有两个不同的结果?它是编译器选项吗?
编译器是C ++,但非常像C.谢谢。
答案 0 :(得分:1)
当浮点除法为零时,结果应该是无穷大(用特殊的位模式表示)。
我的猜测是第二个应用程序实际上不执行除零,而是一个非常小的除法。您可以通过检查基础表示来检查这一点,无论是在调试器中还是通过跟踪输出(您可以通过将它放在浮点类型和相同大小的整数的并集中来访问它)。请注意,简单地打印它可能不会显示这一点,因为打印算法有时会将非常小的数字打印为零。