15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef BASE_FLOAT_UTIL_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BASE_FLOAT_UTIL_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <float.h>
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <cmath>
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochtemplate <typename Float>
17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochinline bool IsFinite(const Float& number) {
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_POSIX)
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return std::isfinite(number) != 0;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_WIN)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return _finite(number) != 0;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochtemplate <typename Float>
26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochinline bool IsNaN(const Float& number) {
27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if defined(OS_POSIX)
28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  return std::isnan(number) != 0;
29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#elif defined(OS_WIN)
30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  return _isnan(number) != 0;
31ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif
32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}
33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace base
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // BASE_FLOAT_UTIL_H_
37