pmr*_*pmr 10 cmath visual-c++ c++11 c11 visual-studio-2012
C++ 11和C11标准定义了
std :: isfinite
函数.的Visual Studio 2012似乎并没有提供它的一部分
cmath或math.h,但amp_math.h它
似乎提供了这一功能.
是isfinite可以互换std::isfinite?文档没有讨论调用时的行为NAN
,我没有VS编译器来测试它.
Chr*_*ica 17
正如Marius已经指出的那样,isfinitefrom amp_math.h将用于C++ AMP,它是类似于CUDA或OpenCL的多核架构上的并行计算的MS扩展.由于此功能只能用于实际的AMP限制功能(通常是GPU内核),因此对您来说不是很常用.
不幸的是,VS 2012不支持C++ 11数学和浮点控制功能.但是一旦你认识到你在VC上并为它实现特殊代码,你就可以使用_finite(或者更确切地说!_finite)from <float.h>,这是至少从VS 2003开始支持的MS- secific功能.但请记住,只需要s并因此转换任何非参数(尽管VC看起来似乎没有正确的),其所有含义(虽然s和quiet s应该没有问题地转换,我不确定如果转换中的信号捕获也是由直接调用产生的)._finitedoubledoublelong doubleINFNaNNaNstd::finite
VC的标准库具有其他类似的功能,以适应他们缺乏C++ 11/C99支持(如同_isnan等).(为什么他们拒绝在这些函数前面删除下划线并放置一个简单的<cfenv>包装器_controlfp,因此更接近完成C++ 11支持是一个完全不同的问题.)
编辑:除此之外,检查INFs和NaNs 的直接方法也可能有效:
template<typename T> bool isfinite(T arg)
{
return arg == arg &&
arg != std::numeric_limits<T>::infinity() &&
arg != -std::numeric_limits<T>::infinity();
}
Run Code Online (Sandbox Code Playgroud)
但当然有可能陷入信号NaNs 的相同含义(尽管我不得不承认我并不精通信号NaNs和浮点异常的复杂性).
| 归档时间: |
|
| 查看次数: |
7975 次 |
| 最近记录: |