1 isnan()
isnan() 判斷是不是NAN值(not a number非法數字)
標准庫中定義了一個宏:NAN來表示非法數字。
比如負數開方、負數求對數、0.0/0.0、0.0* INFINITY(無窮大)、INFINITY/INFINITY、INFINITY-INFINITY
以上操作都會得到NAN。
注意:如果是整數0/0會產生操作異常
2 isinf()
isinf()測試某個浮點數是否是無限大,其中INF表示無窮大
3 用法
isfinite()測試某個浮點數是不是有限的數
isfinite(float x);
isfinite(double x);
isfinite(long double x);
isinf()測試某個浮點數是否是無限大
isinf(float x);
isinf(double x);
isinf(long double x);
isnan()測試某個浮點數是否是 非數字
isnan(float x);
isnan(double x);
isnan(long double x);
isnormal()測試某個浮點數是否被規格化
isnormal(float x);
isnormal(double x);
isnormal(long double x);
signbit()測試某個浮點數是否為負數
signbit(float x);
signbit(double x);
signbit(long double x);
————————————————
std::isnan
|
定義於頭文件
<cmath>
|
||
|
bool isnan( float arg );
|
(1) | (C++11 起) |
|
bool isnan( double arg );
|
(2) | (C++11 起) |
|
bool isnan( long double arg );
|
(3) | (C++11 起) |
|
bool isnan( IntegralType arg );
|
(4) | (C++11 起) |
arg 是否為非數( NaN )值。
arg 參數的重載集或函數模板。等價於 (2) (將參數轉型為 double )。
參數
| arg | - | 浮點值 |
返回值
若 arg 為 NaN 則為 true ,否則為 false 。
注意
有多個擁有不同符號位和載荷的不同 NaN 值,參閱 std::nan 及 std::numeric_limits::quiet_NaN 。
NaN 值決不與自身或其他 NaN 值比較相等。 IEEE-754 不要求復制 NaN 保留其位表示(符號與載荷),盡管大多數實現保留。
另一種測試浮點值是否 NaN 的方式是與自身比較: bool is_nan(double x) { return x != x; }
示例
#include <iostream>
#include <cmath> #include <cfloat> int main() { std::cout << std::boolalpha << "isnan(NaN) = " << std::isnan(NAN) << '\n' << "isnan(Inf) = " << std::isnan(INFINITY) << '\n' << "isnan(0.0) = " << std::isnan(0.0) << '\n' << "isnan(DBL_MIN/2.0) = " << std::isnan(DBL_MIN/2.0) << '\n' << "isnan(0.0 / 0.0) = " << std::isnan(0.0/0.0) << '\n' << "isnan(Inf - Inf) = " << std::isnan(INFINITY - INFINITY) << '\n'; }
輸出:
isnan(NaN) = true isnan(Inf) = false isnan(0.0) = false isnan(DBL_MIN/2.0) = false isnan(0.0 / 0.0) = true isnan(Inf - Inf) = true
std::isinf
|
定義於頭文件
<cmath>
|
||
|
bool isinf( float arg );
|
(1) | (C++11 起) |
|
bool isinf( double arg );
|
(2) | (C++11 起) |
|
bool isinf( long double arg );
|
(3) | (C++11 起) |
|
bool isinf( IntegralType arg );
|
(4) | (C++11 起) |
arg 是否為正或負無窮大。
arg 參數的重載集或函數模板。等價於 (2) (將參數轉型為 double )。
參數
| arg | - | 浮點值 |
返回值
若 arg 為無窮大則為 true ,否則為 false 。
示例
#include <iostream>
#include <cmath> #include <cfloat> int main() { std::cout << std::boolalpha << "isinf(NaN) = " << std::isinf(NAN) << '\n' << "isinf(Inf) = " << std::isinf(INFINITY) << '\n' << "isinf(0.0) = " << std::isinf(0.0) << '\n' << "isinf(exp(800)) = " << std::isinf(std::exp(800)) << '\n' << "isinf(DBL_MIN/2.0) = " << std::isinf(DBL_MIN/2.0) << '\n'; }
輸出:
isinf(NaN) = false isinf(Inf) = true isinf(0.0) = false isinf(exp(800)) = true isinf(DBL_MIN/2.0) = false
