当我调试代码时,我发现GCC和Clang都为0.0/0.0产生nan,这是我所期望的,但GCC产生的nan将符号位设置为1,而Clang将其设置为0(如果我没记错的话,与ICC一致)。现在显然这两种形式都是允许的,但我一直想知道为什么0.0/0.0会使GCC输出“否定”结果(打印它会给出-nan),并且-(0.0/0.0)给出“肯定”结果?更令人困惑的是,-0.0/0.0又是“负数”了。这是一个不断折叠的怪癖吗?编辑实际上,正是不断的折叠使它成为一个积极的nan。如果我在运行时强制计算,我会在GCC和Clang上得到负nanvolatilefloatzero=0.0;std::cout
当我调试代码时,我发现GCC和Clang都为0.0/0.0产生nan,这是我所期望的,但GCC产生的nan将符号位设置为1,而Clang将其设置为0(如果我没记错的话,与ICC一致)。现在显然这两种形式都是允许的,但我一直想知道为什么0.0/0.0会使GCC输出“否定”结果(打印它会给出-nan),并且-(0.0/0.0)给出“肯定”结果?更令人困惑的是,-0.0/0.0又是“负数”了。这是一个不断折叠的怪癖吗?编辑实际上,正是不断的折叠使它成为一个积极的nan。如果我在运行时强制计算,我会在GCC和Clang上得到负nanvolatilefloatzero=0.0;std::cout
我正在尝试创建一个等于Inf+Inf*j的复无穷大,其中j是复变量。当我这样做时:#include#includeusingstd;...complexattempt1=complex(numeric_limits::infinity(),numeric_limits::infinity());返回复数(NaN+Inf*j)。但是complexattempt2=complex(numeric_limits::infinity());返回复数(Inf+0*j)。还有:complexattempt_at_imag_inf=complex(any_value_here,numeric_lim
我正在尝试创建一个等于Inf+Inf*j的复无穷大,其中j是复变量。当我这样做时:#include#includeusingstd;...complexattempt1=complex(numeric_limits::infinity(),numeric_limits::infinity());返回复数(NaN+Inf*j)。但是complexattempt2=complex(numeric_limits::infinity());返回复数(Inf+0*j)。还有:complexattempt_at_imag_inf=complex(any_value_here,numeric_lim
我想使用iostream和VisualC++在文本文件中读取和写入NaN值。写入NaN值时,我得到1.#QNAN。但是,读回来输出1.0.floatnan=std::numeric_limits::quiet_NaN();std::ofstreamos("output.txt");os输出是1.#QNAN.std::ifstreamis("output.txt");is>>nan;is.close();nan等于1.0。解决方案最后,按照awoodland的建议,我想出了这个解决方案。我选择“nan”作为NaN的字符串表示。>运算符都被覆盖。usingnamespace::std;cl
我想使用iostream和VisualC++在文本文件中读取和写入NaN值。写入NaN值时,我得到1.#QNAN。但是,读回来输出1.0.floatnan=std::numeric_limits::quiet_NaN();std::ofstreamos("output.txt");os输出是1.#QNAN.std::ifstreamis("output.txt");is>>nan;is.close();nan等于1.0。解决方案最后,按照awoodland的建议,我想出了这个解决方案。我选择“nan”作为NaN的字符串表示。>运算符都被覆盖。usingnamespace::std;cl
我正在编写光线追踪器,其中一部分过程正在发射可能会或可能不会击中对象(几何对象)的光线。如果没有发生交集(交集是虚构的),许多描述对象的方程自然返回NaN,但如果没有发生交集,则并非所有对象都返回NaN。我知道如果没有发生交集,我可以强制返回sqrt(-1),但我想知道是否有办法以更便宜的方式返回它。 最佳答案 这应该可行:#includereturnstd::numeric_limits::quiet_NaN(); 关于c++-故意返回NaN,我们在StackOverflow上找到一个
我正在编写光线追踪器,其中一部分过程正在发射可能会或可能不会击中对象(几何对象)的光线。如果没有发生交集(交集是虚构的),许多描述对象的方程自然返回NaN,但如果没有发生交集,则并非所有对象都返回NaN。我知道如果没有发生交集,我可以强制返回sqrt(-1),但我想知道是否有办法以更便宜的方式返回它。 最佳答案 这应该可行:#includereturnstd::numeric_limits::quiet_NaN(); 关于c++-故意返回NaN,我们在StackOverflow上找到一个
我这里有一个使用isnan的小型测试应用程序来自:#include#includeintmain(){doubled=NAN;std::cout在3种不同的标准下构建和运行:$g++-std=c++98main.cpp;./a.out1$g++-std=c++11main.cpp;./a.out1$g++-std=c++14main.cpp;./a.out1现在我们还包括,并同时使用isnan进行测试和std::isnan:#include#include#includeintmain(){doubled=NAN;std::cout构建并运行:C++98作品$g++-std=c++98
我这里有一个使用isnan的小型测试应用程序来自:#include#includeintmain(){doubled=NAN;std::cout在3种不同的标准下构建和运行:$g++-std=c++98main.cpp;./a.out1$g++-std=c++11main.cpp;./a.out1$g++-std=c++14main.cpp;./a.out1现在我们还包括,并同时使用isnan进行测试和std::isnan:#include#include#includeintmain(){doubled=NAN;std::cout构建并运行:C++98作品$g++-std=c++98