blob: 90273106cd65193dbef7edeba2825e1c040adabb [file] [log] [blame]
Torne (Richard Coles)58218062012-11-14 11:43:16 +00001// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef BASE_FLOAT_UTIL_H_
6#define BASE_FLOAT_UTIL_H_
7
8#include "build/build_config.h"
9
10#include <float.h>
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010011
12#include <cmath>
Torne (Richard Coles)58218062012-11-14 11:43:16 +000013
14namespace base {
15
Ben Murdochca12bfa2013-07-23 11:17:05 +010016template <typename Float>
17inline bool IsFinite(const Float& number) {
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010018#if defined(OS_POSIX)
19 return std::isfinite(number) != 0;
Torne (Richard Coles)58218062012-11-14 11:43:16 +000020#elif defined(OS_WIN)
21 return _finite(number) != 0;
22#endif
23}
24
Ben Murdochca12bfa2013-07-23 11:17:05 +010025template <typename Float>
26inline bool IsNaN(const Float& number) {
27#if defined(OS_POSIX)
28 return std::isnan(number) != 0;
29#elif defined(OS_WIN)
30 return _isnan(number) != 0;
31#endif
32}
33
Torne (Richard Coles)58218062012-11-14 11:43:16 +000034} // namespace base
35
36#endif // BASE_FLOAT_UTIL_H_