Browse Source

math: degrees() and radians() return floating point even with integer arguments.

This avoids silly mistakes when calling radians(180) instead of
radians(180.0). The first one used to return 3 instead of 3.14159…
undefined
Sam Hocevar 9 years ago
parent
commit
41af385a4c
1 changed files with 28 additions and 24 deletions
  1. +28
    -24
      src/lol/math/functions.h

+ 28
- 24
src/lol/math/functions.h View File

@@ -1,12 +1,14 @@
//
// Lol Engine
// Lol Engine
//
// Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net>
// Copyright: (c) 2012-2013 Benjamin "Touky" Huet <huet.benjamin@gmail.com>
// This program is free software; you can redistribute it and/or
// modify it under the terms of the Do What The Fuck You Want To
// Public License, Version 2, as published by Sam Hocevar. See
// http://www.wtfpl.net/ for more details.
// Copyright © 2010—2015 Sam Hocevar <sam@hocevar.net>
// © 2012—2013 Benjamin “Touky” Huet <huet.benjamin@gmail.com>
//
// Lol Engine is free software. It comes without any warranty, to
// the extent permitted by applicable law. You can redistribute it
// and/or modify it under the terms of the Do What the Fuck You Want
// to Public License, Version 2, as published by the WTFPL Task Force.
// See http://www.wtfpl.net/ for more details.
//

#pragma once
@@ -104,15 +106,6 @@ static inline ldouble degrees(ldouble radians)
return radians * (180.0L / LD_PI);
}

static inline int8_t degrees(int8_t x) { return (int8_t) degrees((float)x); }
static inline uint8_t degrees(uint8_t x) { return (uint8_t) degrees((float)x); }
static inline int16_t degrees(int16_t x) { return (int16_t) degrees((float)x); }
static inline uint16_t degrees(uint16_t x) { return (uint16_t)degrees((float)x); }
static inline int32_t degrees(int32_t x) { return (int32_t) degrees((double)x); }
static inline uint32_t degrees(uint32_t x) { return (uint32_t)degrees((double)x); }
static inline int64_t degrees(int64_t x) { return (int64_t) degrees((ldouble)x); }
static inline uint64_t degrees(uint64_t x) { return (uint64_t)degrees((ldouble)x); }

static inline float radians(float degrees)
{
return degrees * (F_PI / 180.0f);
@@ -128,14 +121,25 @@ static inline ldouble radians(ldouble degrees)
return degrees * (LD_PI / 180.0L);
}

static inline int8_t radians(int8_t x) { return (int8_t) radians((float)x); }
static inline uint8_t radians(uint8_t x) { return (uint8_t) radians((float)x); }
static inline int16_t radians(int16_t x) { return (int16_t) radians((float)x); }
static inline uint16_t radians(uint16_t x) { return (uint16_t)radians((float)x); }
static inline int32_t radians(int32_t x) { return (int32_t) radians((double)x); }
static inline uint32_t radians(uint32_t x) { return (uint32_t)radians((double)x); }
static inline int64_t radians(int64_t x) { return (int64_t) radians((ldouble)x); }
static inline uint64_t radians(uint64_t x) { return (uint64_t)radians((ldouble)x); }
/* The integer versions return floating point values. This avoids nasty
* surprises when calling radians(180) instead of radians(180.0). */
static inline float degrees(int8_t x) { return degrees(float(x)); }
static inline float degrees(uint8_t x) { return degrees(float(x)); }
static inline float degrees(int16_t x) { return degrees(float(x)); }
static inline float degrees(uint16_t x) { return degrees(float(x)); }
static inline double degrees(int32_t x) { return degrees(double(x)); }
static inline double degrees(uint32_t x) { return degrees(double(x)); }
static inline ldouble degrees(int64_t x) { return degrees(ldouble(x)); }
static inline ldouble degrees(uint64_t x) { return degrees(ldouble(x)); }

static inline float radians(int8_t x) { return radians(float(x)); }
static inline float radians(uint8_t x) { return radians(float(x)); }
static inline float radians(int16_t x) { return radians(float(x)); }
static inline float radians(uint16_t x) { return radians(float(x)); }
static inline double radians(int32_t x) { return radians(double(x)); }
static inline double radians(uint32_t x) { return radians(double(x)); }
static inline ldouble radians(int64_t x) { return radians(ldouble(x)); }
static inline ldouble radians(uint64_t x) { return radians(ldouble(x)); }

static inline float mix(float const &a, float const &b, float const &x)
{


Loading…
Cancel
Save