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