1 // Copyright 2020 The Pigweed Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not 4 // use this file except in compliance with the License. You may obtain a copy of 5 // the License at 6 // 7 // https://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 // License for the specific language governing permissions and limitations under 13 // the License. 14 #pragma once 15 16 #include <math.h> 17 18 #include "pw_polyfill/standard_library/namespace.h" 19 20 _PW_POLYFILL_BEGIN_NAMESPACE_STD 21 22 // The integer overloads of these functions are not provided. 23 24 // This is not technically correct, but avoids ambiguous calls to an overloaded 25 // abs function. 26 template <typename T> abs(T value)27inline T abs(T value) { 28 return value < 0 ? -value : value; 29 } 30 31 #ifdef isfinite 32 #undef isfinite 33 #endif // isfinite 34 isfinite(float value)35inline bool isfinite(float value) { return __builtin_isfinite(value); } isfinite(double value)36inline bool isfinite(double value) { return __builtin_isfinite(value); } isfinite(long double value)37inline bool isfinite(long double value) { return __builtin_isfinite(value); } 38 39 #ifdef isnan 40 #undef isnan 41 #endif // isnan 42 isnan(float value)43inline bool isnan(float value) { return __builtin_isnan(value); } isnan(double value)44inline bool isnan(double value) { return __builtin_isnan(value); } isnan(long double value)45inline bool isnan(long double value) { return __builtin_isnan(value); } 46 47 #ifdef signbit 48 #undef signbit 49 #endif // signbit 50 signbit(float value)51inline bool signbit(float value) { return __builtin_signbit(value); } signbit(double value)52inline bool signbit(double value) { return __builtin_signbit(value); } signbit(long double value)53inline bool signbit(long double value) { return __builtin_signbit(value); } 54 55 using ::round; 56 57 _PW_POLYFILL_END_NAMESPACE_STD 58