mirror of
				https://github.com/theoludwig/libcproject.git
				synced 2025-05-21 23:21:15 +02:00 
			
		
		
		
	feat: use double instead of float for better precision
				
					
				
			BREAKING CHANGE: Functions signatures changed in the `mathematics` module. BREAKING CHANGE: Renamed `MATHEMATICS_FLOAT_PRECISION` to `MATHEMATICS_DOUBLE_PRECISION`
This commit is contained in:
		@@ -1,7 +1,7 @@
 | 
				
			|||||||
#include "mathematics.h"
 | 
					#include "mathematics.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool mathematics_equals(const float number1, const float number2) {
 | 
					bool mathematics_equals(const double number1, const double number2) {
 | 
				
			||||||
  return (number1 - number2) < MATHEMATICS_FLOAT_PRECISION;
 | 
					  return (number1 - number2) < MATHEMATICS_DOUBLE_PRECISION;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsigned long long mathematics_absolute_value(const long long number) {
 | 
					unsigned long long mathematics_absolute_value(const long long number) {
 | 
				
			||||||
@@ -15,9 +15,9 @@ unsigned long long mathematics_pow(unsigned long long base, unsigned long long e
 | 
				
			|||||||
  return exponent == 0 ? 1 : base * mathematics_pow(base, exponent - 1);
 | 
					  return exponent == 0 ? 1 : base * mathematics_pow(base, exponent - 1);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
float mathematics_root(float number, unsigned int nth_root) {
 | 
					double mathematics_root(double number, unsigned int nth_root) {
 | 
				
			||||||
  float result = number;
 | 
					  double result = number;
 | 
				
			||||||
  float previous_result = 0;
 | 
					  double previous_result = 0;
 | 
				
			||||||
  while (!mathematics_equals(result, previous_result)) {
 | 
					  while (!mathematics_equals(result, previous_result)) {
 | 
				
			||||||
    result = (((nth_root - 1) * previous_result) + (number / mathematics_pow(result, nth_root - 1))) / nth_root;
 | 
					    result = (((nth_root - 1) * previous_result) + (number / mathematics_pow(result, nth_root - 1))) / nth_root;
 | 
				
			||||||
    previous_result = result;
 | 
					    previous_result = result;
 | 
				
			||||||
@@ -25,7 +25,7 @@ float mathematics_root(float number, unsigned int nth_root) {
 | 
				
			|||||||
  return result;
 | 
					  return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
float mathematics_square_root(float number) {
 | 
					double mathematics_square_root(double number) {
 | 
				
			||||||
  return mathematics_root(number, 2);
 | 
					  return mathematics_root(number, 2);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
#ifndef __LIBCPROJECT_MATHEMATICS__
 | 
					#ifndef __LIBCPROJECT_MATHEMATICS__
 | 
				
			||||||
#define __LIBCPROJECT_MATHEMATICS__
 | 
					#define __LIBCPROJECT_MATHEMATICS__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MATHEMATICS_FLOAT_PRECISION 0.00000001
 | 
					#define MATHEMATICS_DOUBLE_PRECISION 0.0000000001
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <errno.h>
 | 
					#include <errno.h>
 | 
				
			||||||
#include <stdbool.h>
 | 
					#include <stdbool.h>
 | 
				
			||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
 * @return false
 | 
					 * @return false
 | 
				
			||||||
 * @since v1.0.0
 | 
					 * @since v1.0.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
bool mathematics_equals(const float number1, const float number2);
 | 
					bool mathematics_equals(const double number1, const double number2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @brief Get the absolute value of a number.
 | 
					 * @brief Get the absolute value of a number.
 | 
				
			||||||
@@ -44,19 +44,19 @@ unsigned long long mathematics_pow(unsigned long long base, unsigned long long e
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 * @param number
 | 
					 * @param number
 | 
				
			||||||
 * @param nth_root
 | 
					 * @param nth_root
 | 
				
			||||||
 * @return float
 | 
					 * @return double
 | 
				
			||||||
 * @since v1.0.0
 | 
					 * @since v1.0.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
float mathematics_root(float number, unsigned int nth_root);
 | 
					double mathematics_root(double number, unsigned int nth_root);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @brief Calculates the square root of a number using Heron's method.
 | 
					 * @brief Calculates the square root of a number using Heron's method.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @param number
 | 
					 * @param number
 | 
				
			||||||
 * @return float
 | 
					 * @return double
 | 
				
			||||||
 * @since v1.0.0
 | 
					 * @since v1.0.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
float mathematics_square_root(float number);
 | 
					double mathematics_square_root(double number);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @brief Calculates the factorial of a number.
 | 
					 * @brief Calculates the factorial of a number.
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user