summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AK/Complex.h44
-rw-r--r--Userland/Applications/Browser/DownloadWidget.cpp1
-rw-r--r--Userland/Applications/Calculator/Calculator.cpp4
-rw-r--r--Userland/Applications/Piano/RollWidget.cpp8
-rw-r--r--Userland/Applications/Piano/Track.cpp5
-rw-r--r--Userland/Applications/PixelPaint/EllipseTool.cpp1
-rw-r--r--Userland/Applications/PixelPaint/LineTool.cpp10
-rw-r--r--Userland/Applications/PixelPaint/RectangleTool.cpp1
-rw-r--r--Userland/Applications/PixelPaint/SprayTool.cpp6
-rw-r--r--Userland/Applications/SoundPlayer/AudioAlgorithms.cpp6
-rw-r--r--Userland/Applications/SoundPlayer/BarsVisualizationWidget.cpp10
-rw-r--r--Userland/Applications/SoundPlayer/SampleWidget.cpp4
-rw-r--r--Userland/Demos/CatDog/CatDog.h1
-rw-r--r--Userland/Demos/Eyes/EyesWidget.cpp8
-rw-r--r--Userland/Demos/Mouse/main.cpp19
-rw-r--r--Userland/Games/2048/GameSizeDialog.cpp4
-rw-r--r--Userland/Libraries/LibAudio/FlacLoader.cpp8
-rw-r--r--Userland/Libraries/LibGL/SoftwareGLContext.cpp1
-rw-r--r--Userland/Libraries/LibGUI/TextEditor.cpp1
-rw-r--r--Userland/Libraries/LibGfx/GIFLoader.cpp8
-rw-r--r--Userland/Libraries/LibGfx/Gamma.h8
-rw-r--r--Userland/Libraries/LibGfx/ICOLoader.cpp1
-rw-r--r--Userland/Libraries/LibGfx/JPGLoader.cpp26
-rw-r--r--Userland/Libraries/LibGfx/Line.h1
-rw-r--r--Userland/Libraries/LibGfx/Matrix4x4.h6
-rw-r--r--Userland/Libraries/LibGfx/PNGLoader.cpp1
-rw-r--r--Userland/Libraries/LibGfx/Painter.cpp14
-rw-r--r--Userland/Libraries/LibGfx/Path.cpp22
-rw-r--r--Userland/Libraries/LibGfx/Point.h4
-rw-r--r--Userland/Libraries/LibGfx/Vector2.h4
-rw-r--r--Userland/Libraries/LibGfx/Vector3.h4
-rw-r--r--Userland/Libraries/LibGfx/Vector4.h4
-rw-r--r--Userland/Libraries/LibJS/Runtime/NumberConstructor.cpp14
-rw-r--r--Userland/Libraries/LibPDF/Parser.cpp1
-rw-r--r--Userland/Libraries/LibTest/Macros.h3
-rw-r--r--Userland/Libraries/LibVT/TerminalWidget.cpp1
-rw-r--r--Userland/Libraries/LibVideo/MatroskaReader.h4
-rw-r--r--Userland/Utilities/du.cpp1
-rw-r--r--Userland/Utilities/functrace.cpp1
-rw-r--r--Userland/Utilities/ntpquery.cpp2
40 files changed, 116 insertions, 156 deletions
diff --git a/AK/Complex.h b/AK/Complex.h
index aaefaf2e90..b9deb170f9 100644
--- a/AK/Complex.h
+++ b/AK/Complex.h
@@ -7,10 +7,7 @@
#pragma once
#include <AK/Concepts.h>
-#if __has_include(<math.h>)
-# define AKCOMPLEX_CAN_USE_MATH_H
-# include <math.h>
-#endif
+#include <AK/Math.h>
#ifdef __cplusplus
# if __cplusplus >= 201103L
@@ -45,18 +42,9 @@ public:
constexpr T magnitude_squared() const COMPLEX_NOEXCEPT { return m_real * m_real + m_imag * m_imag; }
-# ifdef AKCOMPLEX_CAN_USE_MATH_H
constexpr T magnitude() const COMPLEX_NOEXCEPT
{
- // for numbers 32 or under bit long we don't need the extra precision of sqrt
- // although it may return values with a considerable error if real and imag are too big?
- if constexpr (sizeof(T) <= sizeof(float)) {
- return sqrtf(m_real * m_real + m_imag * m_imag);
- } else if constexpr (sizeof(T) <= sizeof(double)) {
- return sqrt(m_real * m_real + m_imag * m_imag);
- } else {
- return sqrtl(m_real * m_real + m_imag * m_imag);
- }
+ return hypot(m_real, m_imag);
}
constexpr T phase() const COMPLEX_NOEXCEPT
@@ -67,15 +55,8 @@ public:
template<AK::Concepts::Arithmetic U, AK::Concepts::Arithmetic V>
static constexpr Complex<T> from_polar(U magnitude, V phase)
{
- if constexpr (sizeof(T) <= sizeof(float)) {
- return Complex<T>(magnitude * cosf(phase), magnitude * sinf(phase));
- } else if constexpr (sizeof(T) <= sizeof(double)) {
- return Complex<T>(magnitude * cos(phase), magnitude * sin(phase));
- } else {
- return Complex<T>(magnitude * cosl(phase), magnitude * sinl(phase));
- }
+ return Complex<T>(magnitude * cos(phase), magnitude * sin(phase));
}
-# endif
template<AK::Concepts::Arithmetic U>
constexpr Complex<T>& operator=(const Complex<U>& other)
@@ -288,7 +269,6 @@ static constinit Complex<T> complex_real_unit = Complex<T>((T)1, (T)0);
template<AK::Concepts::Arithmetic T>
static constinit Complex<T> complex_imag_unit = Complex<T>((T)0, (T)1);
-# ifdef AKCOMPLEX_CAN_USE_MATH_H
template<AK::Concepts::Arithmetic T, AK::Concepts::Arithmetic U>
static constexpr bool approx_eq(const Complex<T>& a, const Complex<U>& b, const double margin = 0.000001)
{
@@ -300,23 +280,15 @@ static constexpr bool approx_eq(const Complex<T>& a, const Complex<U>& b, const
template<AK::Concepts::Arithmetic T>
static constexpr Complex<T> cexp(const Complex<T>& a)
{
- // FIXME: this can probably be faster and not use so many expensive trigonometric functions
- if constexpr (sizeof(T) <= sizeof(float)) {
- return expf(a.real()) * Complex<T>(cosf(a.imag()), sinf(a.imag()));
- } else if constexpr (sizeof(T) <= sizeof(double)) {
- return exp(a.real()) * Complex<T>(cos(a.imag()), sin(a.imag()));
- } else {
- return expl(a.real()) * Complex<T>(cosl(a.imag()), sinl(a.imag()));
- }
+ // FIXME: this can probably be faster and not use so many "expensive" trigonometric functions
+ return exp(a.real()) * Complex<T>(cos(a.imag()), sin(a.imag()));
}
}
-# endif
+using AK::approx_eq;
+using AK::cexp;
using AK::Complex;
using AK::complex_imag_unit;
using AK::complex_real_unit;
-# ifdef AKCOMPLEX_CAN_USE_MATH_H
-using AK::approx_eq;
-using AK::cexp;
-# endif
+
#endif
diff --git a/Userland/Applications/Browser/DownloadWidget.cpp b/Userland/Applications/Browser/DownloadWidget.cpp
index 594cbbb37f..39b3835677 100644
--- a/Userland/Applications/Browser/DownloadWidget.cpp
+++ b/Userland/Applications/Browser/DownloadWidget.cpp
@@ -22,7 +22,6 @@
#include <LibGUI/Window.h>
#include <LibProtocol/RequestClient.h>
#include <LibWeb/Loader/ResourceLoader.h>
-#include <math.h>
namespace Browser {
diff --git a/Userland/Applications/Calculator/Calculator.cpp b/Userland/Applications/Calculator/Calculator.cpp
index 4532bb2541..a0972927a5 100644
--- a/Userland/Applications/Calculator/Calculator.cpp
+++ b/Userland/Applications/Calculator/Calculator.cpp
@@ -6,7 +6,7 @@
#include "Calculator.h"
#include <AK/Assertions.h>
-#include <math.h>
+#include <AK/Math.h>
Calculator::Calculator()
{
@@ -37,7 +37,7 @@ double Calculator::begin_operation(Operation operation, double argument)
m_has_error = true;
return argument;
}
- res = sqrt(argument);
+ res = AK::sqrt(argument);
clear_operation();
break;
case Operation::Inverse:
diff --git a/Userland/Applications/Piano/RollWidget.cpp b/Userland/Applications/Piano/RollWidget.cpp
index b9dc063203..5c4e68efa6 100644
--- a/Userland/Applications/Piano/RollWidget.cpp
+++ b/Userland/Applications/Piano/RollWidget.cpp
@@ -8,11 +8,11 @@
#include "RollWidget.h"
#include "TrackManager.h"
+#include <AK/Math.h>
#include <LibGUI/Painter.h>
#include <LibGUI/Scrollbar.h>
#include <LibGfx/Font.h>
#include <LibGfx/FontDatabase.h>
-#include <math.h>
constexpr int note_height = 20;
constexpr int max_note_width = note_height * 2;
@@ -47,7 +47,7 @@ void RollWidget::paint_event(GUI::PaintEvent& event)
if (m_num_notes < time_signature_notes)
m_num_notes = time_signature_notes;
else
- m_num_notes = time_signature_notes * pow(2, static_cast<int>(log2(m_num_notes / time_signature_notes)));
+ m_num_notes = time_signature_notes * AK::exp2(AK::log2(m_num_notes / time_signature_notes));
m_note_width = static_cast<double>(m_roll_width) / m_num_notes;
// This calculates the minimum number of rows needed. We account for a
@@ -62,9 +62,9 @@ void RollWidget::paint_event(GUI::PaintEvent& event)
int key_pattern_index = (notes_per_octave - 1) - (note_offset % notes_per_octave);
int x_offset = horizontal_scrollbar().value();
- int horizontal_note_offset_remainder = fmod(x_offset, m_note_width);
+ int horizontal_note_offset_remainder = static_cast<int>(AK::fmod((double)x_offset, m_note_width));
int horizontal_paint_area = widget_inner_rect().width() + horizontal_note_offset_remainder;
- if (fmod(horizontal_paint_area, m_note_width) != 0)
+ if (AK::fmod((double)horizontal_paint_area, m_note_width) != 0.)
horizontal_paint_area += m_note_width;
int horizontal_notes_to_paint = horizontal_paint_area / m_note_width;
diff --git a/Userland/Applications/Piano/Track.cpp b/Userland/Applications/Piano/Track.cpp
index 38d5a3cc65..4f8567fe16 100644
--- a/Userland/Applications/Piano/Track.cpp
+++ b/Userland/Applications/Piano/Track.cpp
@@ -7,6 +7,7 @@
*/
#include "Track.h"
+#include <AK/Math.h>
#include <AK/NumericLimits.h>
#include <LibAudio/Loader.h>
#include <math.h>
@@ -176,7 +177,7 @@ Audio::Frame Track::square(size_t note)
{
double pos = note_frequencies[note] / sample_rate;
double square_step = pos * 2 * M_PI;
- double w = sin(m_pos[note]) >= 0 ? 1 : -1;
+ double w = AK::sin(m_pos[note]) >= 0 ? 1 : -1;
m_pos[note] += square_step;
return w;
}
@@ -185,7 +186,7 @@ Audio::Frame Track::triangle(size_t note)
{
double triangle_step = note_frequencies[note] / sample_rate;
double t = m_pos[note];
- double w = fabs(fmod((4 * t) + 1, 4) - 2) - 1;
+ double w = AK::fabs(AK::fmod((4 * t) + 1, 4.) - 2) - 1.;
m_pos[note] += triangle_step;
return w;
}
diff --git a/Userland/Applications/PixelPaint/EllipseTool.cpp b/Userland/Applications/PixelPaint/EllipseTool.cpp
index 7d9ccbf336..cf129ed86a 100644
--- a/Userland/Applications/PixelPaint/EllipseTool.cpp
+++ b/Userland/Applications/PixelPaint/EllipseTool.cpp
@@ -11,7 +11,6 @@
#include <LibGUI/Menu.h>
#include <LibGUI/Painter.h>
#include <LibGfx/Rect.h>
-#include <math.h>
namespace PixelPaint {
diff --git a/Userland/Applications/PixelPaint/LineTool.cpp b/Userland/Applications/PixelPaint/LineTool.cpp
index 876f5094a5..8514e0bf32 100644
--- a/Userland/Applications/PixelPaint/LineTool.cpp
+++ b/Userland/Applications/PixelPaint/LineTool.cpp
@@ -7,24 +7,24 @@
#include "LineTool.h"
#include "ImageEditor.h"
#include "Layer.h"
+#include <AK/Math.h>
#include <LibGUI/Action.h>
#include <LibGUI/Menu.h>
#include <LibGUI/Painter.h>
-#include <math.h>
namespace PixelPaint {
static Gfx::IntPoint constrain_line_angle(Gfx::IntPoint const& start_pos, Gfx::IntPoint const& end_pos, float angle_increment)
{
- float current_angle = atan2f(end_pos.y() - start_pos.y(), end_pos.x() - start_pos.x()) + float { M_PI * 2 };
+ float current_angle = AK::atan2<float>(end_pos.y() - start_pos.y(), end_pos.x() - start_pos.x()) + float { M_PI * 2 };
float constrained_angle = ((int)((current_angle + angle_increment / 2) / angle_increment)) * angle_increment;
auto diff = end_pos - start_pos;
- float line_length = sqrt(diff.x() * diff.x() + diff.y() * diff.y());
+ float line_length = AK::hypot<float>(diff.x(), diff.y());
- return { start_pos.x() + (int)(cosf(constrained_angle) * line_length),
- start_pos.y() + (int)(sinf(constrained_angle) * line_length) };
+ return { start_pos.x() + (int)(AK::cos(constrained_angle) * line_length),
+ start_pos.y() + (int)(AK::sin(constrained_angle) * line_length) };
}
LineTool::LineTool()
diff --git a/Userland/Applications/PixelPaint/RectangleTool.cpp b/Userland/Applications/PixelPaint/RectangleTool.cpp
index d9ec04015d..239d4d82b7 100644
--- a/Userland/Applications/PixelPaint/RectangleTool.cpp
+++ b/Userland/Applications/PixelPaint/RectangleTool.cpp
@@ -11,7 +11,6 @@
#include <LibGUI/Menu.h>
#include <LibGUI/Painter.h>
#include <LibGfx/Rect.h>
-#include <math.h>
namespace PixelPaint {
diff --git a/Userland/Applications/PixelPaint/SprayTool.cpp b/Userland/Applications/PixelPaint/SprayTool.cpp
index fcf47ab517..1fdbe84331 100644
--- a/Userland/Applications/PixelPaint/SprayTool.cpp
+++ b/Userland/Applications/PixelPaint/SprayTool.cpp
@@ -7,6 +7,7 @@
#include "SprayTool.h"
#include "ImageEditor.h"
#include "Layer.h"
+#include <AK/Math.h>
#include <AK/Queue.h>
#include <LibGUI/Action.h>
#include <LibGUI/BoxLayout.h>
@@ -15,7 +16,6 @@
#include <LibGUI/Painter.h>
#include <LibGUI/Slider.h>
#include <LibGfx/Bitmap.h>
-#include <math.h>
#include <stdio.h>
namespace PixelPaint {
@@ -52,8 +52,8 @@ void SprayTool::paint_it()
for (int i = 0; i < M_PI * base_radius * base_radius * (m_density / 100.0); i++) {
double radius = base_radius * nrand();
double angle = 2 * M_PI * nrand();
- const int xpos = m_last_pos.x() + radius * cos(angle);
- const int ypos = m_last_pos.y() - radius * sin(angle);
+ const int xpos = m_last_pos.x() + radius * AK::cos(angle);
+ const int ypos = m_last_pos.y() - radius * AK::sin(angle);
if (xpos < 0 || xpos >= bitmap.width())
continue;
if (ypos < 0 || ypos >= bitmap.height())
diff --git a/Userland/Applications/SoundPlayer/AudioAlgorithms.cpp b/Userland/Applications/SoundPlayer/AudioAlgorithms.cpp
index cef1ad9402..b25de59797 100644
--- a/Userland/Applications/SoundPlayer/AudioAlgorithms.cpp
+++ b/Userland/Applications/SoundPlayer/AudioAlgorithms.cpp
@@ -6,7 +6,7 @@
#include "AudioAlgorithms.h"
#include <AK/Complex.h>
-#include <math.h>
+#include <AK/Math.h>
// This function uses the input vector as output too. therefore, if you wish to
// leave it intact, pass a copy to this function
@@ -38,8 +38,8 @@ void fft(Vector<Complex<double>>& sample_data, bool invert)
}
for (int len = 2; len <= n; len <<= 1) {
- double ang = 2 * M_PI / len * (invert ? -1 : 1);
- Complex<double> wlen(cos(ang), sin(ang));
+ double ang = 2 * AK::Pi<double> / len * (invert ? -1 : 1);
+ Complex<double> wlen(AK::cos(ang), AK::sin(ang));
for (int i = 0; i < n; i += len) {
Complex<double> w = { 1., 0. };
for (int j = 0; j < len / 2; j++) {
diff --git a/Userland/Applications/SoundPlayer/BarsVisualizationWidget.cpp b/Userland/Applications/SoundPlayer/BarsVisualizationWidget.cpp
index a52eb5e8de..be4c09ba46 100644
--- a/Userland/Applications/SoundPlayer/BarsVisualizationWidget.cpp
+++ b/Userland/Applications/SoundPlayer/BarsVisualizationWidget.cpp
@@ -7,11 +7,11 @@
#include "BarsVisualizationWidget.h"
#include "AudioAlgorithms.h"
#include <AK/Complex.h>
+#include <AK/Math.h>
#include <LibGUI/Event.h>
#include <LibGUI/Menu.h>
#include <LibGUI/Painter.h>
#include <LibGUI/Window.h>
-#include <math.h>
u32 round_previous_power_of_2(u32 x);
@@ -27,7 +27,7 @@ void BarsVisualizationWidget::paint_event(GUI::PaintEvent& event)
return;
fft(m_sample_buffer, false);
- double max = sqrt(m_sample_count * 2);
+ double max = AK::sqrt(m_sample_count * 2.);
double freq_bin = m_samplerate / m_sample_count;
@@ -45,10 +45,10 @@ void BarsVisualizationWidget::paint_event(GUI::PaintEvent& event)
int bins_per_group = ceil_div((m_sample_count - 1) / 2, group_count) * freq_bin;
for (int i = 1; i < m_sample_count / 2; i++) {
- groups[(i * freq_bin) / bins_per_group] += fabs(m_sample_buffer.data()[i].real());
+ groups[(i * freq_bin) / bins_per_group] += AK::fabs(m_sample_buffer.data()[i].real());
}
for (int i = 0; i < group_count; i++)
- groups[i] /= max * freq_bin / (m_adjust_frequencies ? (clamp(pow(M_E, (double)i / group_count * 3.) - 1.75, 1., 15.)) : 1.);
+ groups[i] /= max * freq_bin / (m_adjust_frequencies ? (clamp(AK::pow(AK::E<double>, (double)i / group_count * 3.) - 1.75, 1., 15.)) : 1.);
const int horizontal_margin = 30;
const int top_vertical_margin = 15;
@@ -102,7 +102,7 @@ void BarsVisualizationWidget::set_buffer(RefPtr<Audio::Buffer> buffer, int sampl
m_sample_count = round_previous_power_of_2(samples_to_use);
m_sample_buffer.resize(m_sample_count);
for (int i = 0; i < m_sample_count; i++) {
- m_sample_buffer.data()[i] = (fabs(buffer->samples()[i].left) + fabs(buffer->samples()[i].right)) / 2.;
+ m_sample_buffer.data()[i] = (AK::fabs(buffer->samples()[i].left) + AK::fabs(buffer->samples()[i].right)) / 2.;
}
update();
diff --git a/Userland/Applications/SoundPlayer/SampleWidget.cpp b/Userland/Applications/SoundPlayer/SampleWidget.cpp
index 1f47778841..ea97ff714e 100644
--- a/Userland/Applications/SoundPlayer/SampleWidget.cpp
+++ b/Userland/Applications/SoundPlayer/SampleWidget.cpp
@@ -5,9 +5,9 @@
*/
#include "SampleWidget.h"
+#include <AK/Math.h>
#include <LibAudio/Buffer.h>
#include <LibGUI/Painter.h>
-#include <math.h>
SampleWidget::SampleWidget()
{
@@ -34,7 +34,7 @@ void SampleWidget::paint_event(GUI::PaintEvent& event)
if (m_buffer) {
int samples_per_pixel = m_buffer->sample_count() / frame_inner_rect().width();
for (int sample_index = 0; sample_index < m_buffer->sample_count() && (x - x_offset) < frame_inner_rect().width(); ++sample_index) {
- float sample = fabsf((float)m_buffer->samples()[sample_index].left);
+ float sample = AK::fabs((float)m_buffer->samples()[sample_index].left);
sample_max = max(sample, sample_max);
++count;
diff --git a/Userland/Demos/CatDog/CatDog.h b/Userland/Demos/CatDog/CatDog.h
index 6d9ba5ea3a..6c730df0a8 100644
--- a/Userland/Demos/CatDog/CatDog.h
+++ b/Userland/Demos/CatDog/CatDog.h
@@ -7,7 +7,6 @@
#include <LibCore/ElapsedTimer.h>
#include <LibGUI/Menu.h>
#include <LibGUI/Widget.h>
-#include <math.h>
#include <unistd.h>
#pragma once
diff --git a/Userland/Demos/Eyes/EyesWidget.cpp b/Userland/Demos/Eyes/EyesWidget.cpp
index 87eb099787..64c1f1e7f1 100644
--- a/Userland/Demos/Eyes/EyesWidget.cpp
+++ b/Userland/Demos/Eyes/EyesWidget.cpp
@@ -5,12 +5,12 @@
*/
#include "EyesWidget.h"
+#include <AK/Math.h>
#include <AK/StdLibExtraDetails.h>
#include <LibGUI/Painter.h>
#include <LibGUI/Window.h>
#include <LibGUI/WindowServerConnection.h>
#include <LibGfx/Palette.h>
-#include <math.h>
EyesWidget::~EyesWidget()
{
@@ -79,7 +79,7 @@ Gfx::IntPoint EyesWidget::pupil_center(Gfx::IntRect& eyeball_bounds) const
auto mouse_vector = m_mouse_position - eyeball_bounds.center();
double dx = mouse_vector.x();
double dy = mouse_vector.y();
- double mouse_distance = sqrt(dx * dx + dy * dy);
+ double mouse_distance = AK::hypot(dx, dy);
if (mouse_distance == 0.0)
return eyeball_bounds.center();
@@ -93,14 +93,14 @@ Gfx::IntPoint EyesWidget::pupil_center(Gfx::IntRect& eyeball_bounds) const
if (dx != 0 && AK::abs(dx) >= AK::abs(dy)) {
double slope = dy / dx;
double slope_squared = slope * slope;
- max_distance_along_this_direction = 0.25 * sqrt(
+ max_distance_along_this_direction = 0.25 * AK::sqrt(
(slope_squared + 1) /
(1 / width_squared + slope_squared / height_squared)
);
} else if (dy != 0 && AK::abs(dy) >= AK::abs(dx)) {
double slope = dx / dy;
double slope_squared = slope * slope;
- max_distance_along_this_direction = 0.25 * sqrt(
+ max_distance_along_this_direction = 0.25 * AK::sqrt(
(slope_squared + 1) /
(slope_squared / width_squared + 1 / height_squared)
);
diff --git a/Userland/Demos/Mouse/main.cpp b/Userland/Demos/Mouse/main.cpp
index ec3a8c8216..7e1cbf30e5 100644
--- a/Userland/Demos/Mouse/main.cpp
+++ b/Userland/Demos/Mouse/main.cpp
@@ -4,6 +4,7 @@
* SPDX-License-Identifier: BSD-2-Clause
*/
+#include <AK/Math.h>
#include <LibGUI/Action.h>
#include <LibGUI/Application.h>
#include <LibGUI/BoxLayout.h>
@@ -18,8 +19,6 @@
#include <LibGfx/Path.h>
#include <unistd.h>
-#include <math.h>
-
class MainFrame final : public GUI::Frame {
C_OBJECT(MainFrame);
@@ -100,17 +99,17 @@ public:
Gfx::IntPoint p3;
Gfx::IntPoint p4;
- p1.set_x(radius * cos(M_PI * m_wheel_delta_acc / 18) + off_x);
- p1.set_y(radius * sin(M_PI * m_wheel_delta_acc / 18) + off_y);
+ p1.set_x(radius * AK::cos(AK::Pi<double> * m_wheel_delta_acc / 18.) + off_x);
+ p1.set_y(radius * AK::sin(AK::Pi<double> * m_wheel_delta_acc / 18.) + off_y);
- p2.set_x(radius * cos(M_PI * (m_wheel_delta_acc + 18) / 18) + off_x);
- p2.set_y(radius * sin(M_PI * (m_wheel_delta_acc + 18) / 18) + off_y);
+ p2.set_x(radius * AK::cos(AK::Pi<double> * (m_wheel_delta_acc + 18) / 18.) + off_x);
+ p2.set_y(radius * AK::sin(AK::Pi<double> * (m_wheel_delta_acc + 18) / 18.) + off_y);
- p3.set_x(radius * cos(M_PI * (m_wheel_delta_acc + 9) / 18) + off_x);
- p3.set_y(radius * sin(M_PI * (m_wheel_delta_acc + 9) / 18) + off_y);
+ p3.set_x(radius * AK::cos(AK::Pi<double> * (m_wheel_delta_acc + 9) / 18.) + off_x);
+ p3.set_y(radius * AK::sin(AK::Pi<double> * (m_wheel_delta_acc + 9) / 18.) + off_y);
- p4.set_x(radius * cos(M_PI * (m_wheel_delta_acc + 27) / 18) + off_x);
- p4.set_y(radius * sin(M_PI * (m_wheel_delta_acc + 27) / 18) + off_y);
+ p4.set_x(radius * AK::cos(AK::Pi<double> * (m_wheel_delta_acc + 27) / 18.) + off_x);
+ p4.set_y(radius * AK::sin(AK::Pi<double> * (m_wheel_delta_acc + 27) / 18.) + off_y);
painter.draw_line(p1, p2, Color::Red, 2);
painter.draw_line(p3, p4, Color::Red, 2);
diff --git a/Userland/Games/2048/GameSizeDialog.cpp b/Userland/Games/2048/GameSizeDialog.cpp
index 4def92cb5e..0e1ca13312 100644
--- a/Userland/Games/2048/GameSizeDialog.cpp
+++ b/Userland/Games/2048/GameSizeDialog.cpp
@@ -6,17 +6,17 @@
#include "GameSizeDialog.h"
#include "Game.h"
+#include <AK/Math.h>
#include <LibGUI/BoxLayout.h>
#include <LibGUI/Button.h>
#include <LibGUI/CheckBox.h>
#include <LibGUI/Label.h>
#include <LibGUI/SpinBox.h>
-#include <math.h>
GameSizeDialog::GameSizeDialog(GUI::Window* parent, size_t board_size, size_t target, bool evil_ai)
: GUI::Dialog(parent)
, m_board_size(board_size)
- , m_target_tile_power(log2(target))
+ , m_target_tile_power(AK::log2(target))
, m_evil_ai(evil_ai)
{
set_rect({ 0, 0, 250, 150 });
diff --git a/Userland/Libraries/LibAudio/FlacLoader.cpp b/Userland/Libraries/LibAudio/FlacLoader.cpp
index 1ac76d90a6..7110d77e2b 100644
--- a/Userland/Libraries/LibAudio/FlacLoader.cpp
+++ b/Userland/Libraries/LibAudio/FlacLoader.cpp
@@ -10,12 +10,12 @@
#include <AK/Debug.h>
#include <AK/FlyString.h>
#include <AK/Format.h>
+#include <AK/Math.h>
#include <AK/Stream.h>
#include <AK/String.h>
#include <AK/StringBuilder.h>
#include <LibCore/File.h>
#include <LibCore/FileStream.h>
-#include <math.h>
namespace Audio {
@@ -417,9 +417,9 @@ u32 FlacLoaderPlugin::convert_sample_count_code(u8 sample_count_code)
return FLAC_BLOCKSIZE_AT_END_OF_HEADER_16;
}
if (sample_count_code >= 2 && sample_count_code <= 5) {
- return 576 * pow(2, (sample_count_code - 2));
+ return 576 * AK::exp2(sample_count_code - 2);
}
- return 256 * pow(2, (sample_count_code - 8));
+ return 256 * AK::exp2(sample_count_code - 8);
}
u32 FlacLoaderPlugin::convert_sample_rate_code(u8 sample_rate_code)
@@ -797,7 +797,7 @@ u64 read_utf8_char(InputStream& input)
while (((start_byte << length) & 0b10000000) == 0b10000000)
++length;
u8 bits_from_start_byte = 8 - (length + 1);
- u8 start_byte_bitmask = pow(2, bits_from_start_byte) - 1;
+ u8 start_byte_bitmask = AK::exp2(bits_from_start_byte) - 1;
character = start_byte_bitmask & start_byte;
for (u8 i = length; i > 0; --i) {
input.read(single_byte_buffer);
diff --git a/Userland/Libraries/LibGL/SoftwareGLContext.cpp b/Userland/Libraries/LibGL/SoftwareGLContext.cpp
index ec5c9dad33..168876e944 100644
--- a/Userland/Libraries/LibGL/SoftwareGLContext.cpp
+++ b/Userland/Libraries/LibGL/SoftwareGLContext.cpp
@@ -18,7 +18,6 @@
#include <LibGfx/Bitmap.h>
#include <LibGfx/Painter.h>
#include <LibGfx/Vector4.h>
-#include <math.h>
using AK::dbgln;
diff --git a/Userland/Libraries/LibGUI/TextEditor.cpp b/Userland/Libraries/LibGUI/TextEditor.cpp
index e69b3a3a74..0202ed163f 100644
--- a/Userland/Libraries/LibGUI/TextEditor.cpp
+++ b/Userland/Libraries/LibGUI/TextEditor.cpp
@@ -28,7 +28,6 @@
#include <LibGfx/Palette.h>
#include <LibSyntax/Highlighter.h>
#include <fcntl.h>
-#include <math.h>
#include <stdio.h>
#include <unistd.h>
diff --git a/Userland/Libraries/LibGfx/GIFLoader.cpp b/Userland/Libraries/LibGfx/GIFLoader.cpp
index 21f64ec57b..233fbac0ed 100644
--- a/Userland/Libraries/LibGfx/GIFLoader.cpp
+++ b/Userland/Libraries/LibGfx/GIFLoader.cpp
@@ -9,11 +9,11 @@
#include <AK/Debug.h>
#include <AK/LexicalPath.h>
#include <AK/MappedFile.h>
+#include <AK/Math.h>
#include <AK/Memory.h>
#include <AK/MemoryStream.h>
#include <AK/NonnullOwnPtrVector.h>
#include <LibGfx/GIFLoader.h>
-#include <math.h>
#include <stdio.h>
#include <string.h>
@@ -138,7 +138,7 @@ public:
: m_lzw_bytes(lzw_bytes)
, m_code_size(min_code_size)
, m_original_code_size(min_code_size)
- , m_table_capacity(pow(2, min_code_size))
+ , m_table_capacity(AK::exp2<u32>(min_code_size))
{
init_code_table();
}
@@ -162,7 +162,7 @@ public:
m_code_table.clear();
m_code_table.extend(m_original_code_table);
m_code_size = m_original_code_size;
- m_table_capacity = pow(2, m_code_size);
+ m_table_capacity = AK::exp2<u32>(m_code_size);
m_output.clear();
}
@@ -563,7 +563,7 @@ static bool load_gif_frame_descriptors(GIFLoadingContext& context)
image.interlaced = (packed_fields & 0x40) != 0;
if (!image.use_global_color_map) {
- size_t local_color_table_size = pow(2, (packed_fields & 7) + 1);
+ size_t local_color_table_size = AK::exp2<size_t>((packed_fields & 7) + 1);
for (size_t i = 0; i < local_color_table_size; ++i) {
u8 r = 0;
diff --git a/Userland/Libraries/LibGfx/Gamma.h b/Userland/Libraries/LibGfx/Gamma.h
index e796996a8d..9f0bfaacfe 100644
--- a/Userland/Libraries/LibGfx/Gamma.h
+++ b/Userland/Libraries/LibGfx/Gamma.h
@@ -7,7 +7,7 @@
#pragma once
#include "Color.h"
-#include <math.h>
+#include <AK/Math.h>
#include <xmmintrin.h>
#include <AK/SIMD.h>
@@ -58,7 +58,7 @@ inline f32x4 linear_to_gamma4(f32x4 x)
// Source for approximation: https://mimosa-pudica.net/fast-gamma/
constexpr float a = 0.00279491f;
constexpr float b = 1.15907984f;
- float c = (b / sqrtf(1.0f + a)) - 1;
+ float c = (b / AK::sqrt(1.0f + a)) - 1;
return ((b * __builtin_ia32_rsqrtps(x + a)) - c) * x;
}
@@ -85,8 +85,8 @@ inline float linear_to_gamma(float x)
// Source for approximation: https://mimosa-pudica.net/fast-gamma/
constexpr float a = 0.00279491;
constexpr float b = 1.15907984;
- float c = (b / sqrtf(1 + a)) - 1;
- return ((b / __builtin_sqrtf(x + a)) - c) * x;
+ float c = (b / AK::sqrt(1 + a)) - 1;
+ return ((b / AK::sqrt(x + a)) - c) * x;
}
// Linearize v1 and v2, lerp them by mix factor, then convert back.
diff --git a/Userland/Libraries/LibGfx/ICOLoader.cpp b/Userland/Libraries/LibGfx/ICOLoader.cpp
index f234060ba5..dd6b27e5ca 100644
--- a/Userland/Libraries/LibGfx/ICOLoader.cpp
+++ b/Userland/Libraries/LibGfx/ICOLoader.cpp
@@ -13,7 +13,6 @@
#include <AK/Types.h>
#include <LibGfx/ICOLoader.h>
#include <LibGfx/PNGLoader.h>
-#include <math.h>
#include <stdio.h>
#include <string.h>
diff --git a/Userland/Libraries/LibGfx/JPGLoader.cpp b/Userland/Libraries/LibGfx/JPGLoader.cpp
index e5591ad43d..c6c2b46508 100644
--- a/Userland/Libraries/LibGfx/JPGLoader.cpp
+++ b/Userland/Libraries/LibGfx/JPGLoader.cpp
@@ -10,12 +10,12 @@
#include <AK/HashMap.h>
#include <AK/LexicalPath.h>
#include <AK/MappedFile.h>
+#include <AK/Math.h>
#include <AK/MemoryStream.h>
#include <AK/String.h>
#include <AK/Vector.h>
#include <LibGfx/Bitmap.h>
#include <LibGfx/JPGLoader.h>
-#include <math.h>
#define JPG_INVALID 0X0000
@@ -864,20 +864,20 @@ static void dequantize(JPGLoadingContext& context, Vector<Macroblock>& macrobloc
static void inverse_dct(const JPGLoadingContext& context, Vector<Macroblock>& macroblocks)
{
- static const float m0 = 2.0 * cos(1.0 / 16.0 * 2.0 * M_PI);
- static const float m1 = 2.0 * cos(2.0 / 16.0 * 2.0 * M_PI);
- static const float m3 = 2.0 * cos(2.0 / 16.0 * 2.0 * M_PI);
- static const float m5 = 2.0 * cos(3.0 / 16.0 * 2.0 * M_PI);
+ static const float m0 = 2.0 * AK::cos(1.0 / 16.0 * 2.0 * AK::Pi<double>);
+ static const float m1 = 2.0 * AK::cos(2.0 / 16.0 * 2.0 * AK::Pi<double>);
+ static const float m3 = 2.0 * AK::cos(2.0 / 16.0 * 2.0 * AK::Pi<double>);
+ static const float m5 = 2.0 * AK::cos(3.0 / 16.0 * 2.0 * AK::Pi<double>);
static const float m2 = m0 - m5;
static const float m4 = m0 + m5;
- static const float s0 = cos(0.0 / 16.0 * M_PI) / sqrt(8);
- static const float s1 = cos(1.0 / 16.0 * M_PI) / 2.0;
- static const float s2 = cos(2.0 / 16.0 * M_PI) / 2.0;
- static const float s3 = cos(3.0 / 16.0 * M_PI) / 2.0;
- static const float s4 = cos(4.0 / 16.0 * M_PI) / 2.0;
- static const float s5 = cos(5.0 / 16.0 * M_PI) / 2.0;
- static const float s6 = cos(6.0 / 16.0 * M_PI) / 2.0;
- static const float s7 = cos(7.0 / 16.0 * M_PI) / 2.0;
+ static const float s0 = AK::cos(0.0 / 16.0 * AK::Pi<double>) / sqrt(8);
+ static const float s1 = AK::cos(1.0 / 16.0 * AK::Pi<double>) / 2.0;
+ static const float s2 = AK::cos(2.0 / 16.0 * AK::Pi<double>) / 2.0;
+ static const float s3 = AK::cos(3.0 / 16.0 * AK::Pi<double>) / 2.0;
+ static const float s4 = AK::cos(4.0 / 16.0 * AK::Pi<double>) / 2.0;
+ static const float s5 = AK::cos(5.0 / 16.0 * AK::Pi<double>) / 2.0;
+ static const float s6 = AK::cos(6.0 / 16.0 * AK::Pi<double>) / 2.0;
+ static const float s7 = AK::cos(7.0 / 16.0 * AK::Pi<double>) / 2.0;
for (u32 vcursor = 0; vcursor < context.mblock_meta.vcount; vcursor += context.vsample_factor) {
for (u32 hcursor = 0; hcursor < context.mblock_meta.hcount; hcursor += context.hsample_factor) {
diff --git a/Userland/Libraries/LibGfx/Line.h b/Userland/Libraries/LibGfx/Line.h
index f9d8176846..d5f8360b04 100644
--- a/Userland/Libraries/LibGfx/Line.h
+++ b/Userland/Libraries/LibGfx/Line.h
@@ -11,7 +11,6 @@
#include <LibGfx/Forward.h>
#include <LibGfx/Point.h>
#include <LibGfx/Rect.h>
-#include <math.h>
#include <stdlib.h>
namespace Gfx {
diff --git a/Userland/Libraries/LibGfx/Matrix4x4.h b/Userland/Libraries/LibGfx/Matrix4x4.h
index 04a5bad0f7..4637f4e816 100644
--- a/Userland/Libraries/LibGfx/Matrix4x4.h
+++ b/Userland/Libraries/LibGfx/Matrix4x4.h
@@ -6,10 +6,10 @@
#pragma once
+#include <AK/Math.h>
#include <LibGfx/Matrix.h>
#include <LibGfx/Vector3.h>
#include <LibGfx/Vector4.h>
-#include <math.h>
namespace Gfx {
@@ -70,8 +70,8 @@ constexpr static Matrix4x4<T> scale_matrix(const Vector3<T>& s)
template<typename T>
constexpr static Matrix4x4<T> rotation_matrix(const Vector3<T>& axis, T angle)
{
- T c = cos(angle);
- T s = sin(angle);
+ T c = AK::cos(angle);
+ T s = AK::sin(angle);
T t = 1 - c;
T x = axis.x();
T y = axis.y();
diff --git a/Userland/Libraries/LibGfx/PNGLoader.cpp b/Userland/Libraries/LibGfx/PNGLoader.cpp
index 8dee3b1d4c..7174b6d50d 100644
--- a/Userland/Libraries/LibGfx/PNGLoader.cpp
+++ b/Userland/Libraries/LibGfx/PNGLoader.cpp
@@ -11,7 +11,6 @@
#include <LibCompress/Zlib.h>
#include <LibGfx/PNGLoader.h>
#include <fcntl.h>
-#include <math.h>
#include <stdio.h>
#include <string.h>
#include <sys/mman.h>
diff --git a/Userland/Libraries/LibGfx/Painter.cpp b/Userland/Libraries/LibGfx/Painter.cpp
index c2141d4cc9..f9159daa43 100644
--- a/Userland/Libraries/LibGfx/Painter.cpp
+++ b/Userland/Libraries/LibGfx/Painter.cpp
@@ -14,6 +14,7 @@
#include <AK/Assertions.h>
#include <AK/Debug.h>
#include <AK/Function.h>
+#include <AK/Math.h>
#include <AK/Memory.h>
#include <AK/Queue.h>
#include <AK/QuickSort.h>
@@ -25,7 +26,6 @@
#include <LibGfx/Palette.h>
#include <LibGfx/Path.h>
#include <LibGfx/TextDirection.h>
-#include <math.h>
#include <stdio.h>
#if defined(__GNUC__) && !defined(__clang__)
@@ -492,11 +492,11 @@ void Painter::draw_ellipse_intersecting(const IntRect& rect, Color color, int th
double increment = M_PI / number_samples;
auto ellipse_x = [&](double theta) -> int {
- return (cos(theta) * rect.width() / sqrt(2)) + rect.center().x();
+ return (AK::cos(theta) * rect.width() / AK::sqrt(2.)) + rect.center().x();
};
auto ellipse_y = [&](double theta) -> int {
- return (sin(theta) * rect.height() / sqrt(2)) + rect.center().y();
+ return (AK::sin(theta) * rect.height() / AK::sqrt(2.)) + rect.center().y();
};
for (auto theta = 0.0; theta < 2 * M_PI; theta += increment) {
@@ -1920,8 +1920,8 @@ void Painter::for_each_line_segment_on_elliptical_arc(const FloatPoint& p1, cons
FloatPoint current_point = relative_start;
FloatPoint next_point = { 0, 0 };
- auto sin_x_axis = sinf(x_axis_rotation);
- auto cos_x_axis = cosf(x_axis_rotation);
+ auto sin_x_axis = AK::sin(x_axis_rotation);
+ auto cos_x_axis = AK::cos(x_axis_rotation);
auto rotate_point = [sin_x_axis, cos_x_axis](FloatPoint& p) {
auto original_x = p.x();
auto original_y = p.y();
@@ -1931,8 +1931,8 @@ void Painter::for_each_line_segment_on_elliptical_arc(const FloatPoint& p1, cons
};
for (double theta = theta_1; theta <= ((double)theta_1 + (double)theta_delta); theta += theta_step) {
- next_point.set_x(a * cosf(theta));
- next_point.set_y(b * sinf(theta));
+ next_point.set_x(a * AK::cos<float>(theta));
+ next_point.set_y(b * AK::sin<float>(theta));
rotate_point(next_point);
callback(current_point + center, next_point + center);
diff --git a/Userland/Libraries/LibGfx/Path.cpp b/Userland/Libraries/LibGfx/Path.cpp
index 9824065e99..b629c46ce5 100644
--- a/Userland/Libraries/LibGfx/Path.cpp
+++ b/Userland/Libraries/LibGfx/Path.cpp
@@ -6,11 +6,11 @@
#include <AK/Function.h>
#include <AK/HashTable.h>
+#include <AK/Math.h>
#include <AK/QuickSort.h>
#include <AK/StringBuilder.h>
#include <LibGfx/Painter.h>
#include <LibGfx/Path.h>
-#include <math.h>
namespace Gfx {
@@ -21,8 +21,8 @@ void Path::elliptical_arc_to(const FloatPoint& point, const FloatPoint& radii, d
double rx = radii.x();
double ry = radii.y();
- double x_axis_rotation_c = cos(x_axis_rotation);
- double x_axis_rotation_s = sin(x_axis_rotation);
+ double x_axis_rotation_c = AK::cos(x_axis_rotation);
+ double x_axis_rotation_s = AK::sin(x_axis_rotation);
// Find the last point
FloatPoint last_point { 0, 0 };
@@ -61,24 +61,24 @@ void Path::elliptical_arc_to(const FloatPoint& point, const FloatPoint& radii, d
auto y1p = -x_axis_rotation_s * x_avg + x_axis_rotation_c * y_avg;
// Step 2: Compute (cx', cy')
- double x1p_sq = pow(x1p, 2.0);
- double y1p_sq = pow(y1p, 2.0);
- double rx_sq = pow(rx, 2.0);
- double ry_sq = pow(ry, 2.0);
+ double x1p_sq = x1p * x1p;
+ double y1p_sq = y1p * y1p;
+ double rx_sq = rx * rx;
+ double ry_sq = ry * ry;
// Step 3 of out-of-range radii correction
double lambda = x1p_sq / rx_sq + y1p_sq / ry_sq;
double multiplier;
if (lambda > 1.0) {
- auto lambda_sqrt = sqrt(lambda);
+ auto lambda_sqrt = AK::sqrt(lambda);
rx *= lambda_sqrt;
ry *= lambda_sqrt;
multiplier = 0.0;
} else {
double numerator = rx_sq * ry_sq - rx_sq * y1p_sq - ry_sq * x1p_sq;
double denominator = rx_sq * y1p_sq + ry_sq * x1p_sq;
- multiplier = sqrt(numerator / denominator);
+ multiplier = AK::sqrt(numerator / denominator);
}
if (large_arc == sweep)
@@ -93,8 +93,8 @@ void Path::elliptical_arc_to(const FloatPoint& point, const FloatPoint& radii, d
double cx = x_axis_rotation_c * cxp - x_axis_rotation_s * cyp + x_avg;
double cy = x_axis_rotation_s * cxp + x_axis_rotation_c * cyp + y_avg;
- double theta_1 = atan2((y1p - cyp) / ry, (x1p - cxp) / rx);
- double theta_2 = atan2((-y1p - cyp) / ry, (-x1p - cxp) / rx);
+ double theta_1 = AK::atan2((y1p - cyp) / ry, (x1p - cxp) / rx);
+ double theta_2 = AK::atan2((-y1p - cyp) / ry, (-x1p - cxp) / rx);
auto theta_delta = theta_2 - theta_1;
diff --git a/Userland/Libraries/LibGfx/Point.h b/Userland/Libraries/LibGfx/Point.h
index 1d1f8f2df9..fcb5d5dbb8 100644
--- a/Userland/Libraries/LibGfx/Point.h
+++ b/Userland/Libraries/LibGfx/Point.h
@@ -7,12 +7,12 @@
#pragma once
#include <AK/Format.h>
+#include <AK/Math.h>
#include <AK/StdLibExtras.h>
#include <LibGfx/AffineTransform.h>
#include <LibGfx/Forward.h>
#include <LibGfx/Orientation.h>
#include <LibIPC/Forward.h>
-#include <math.h>
namespace Gfx {
@@ -223,7 +223,7 @@ public:
{
if (*this == other)
return 0;
- return sqrtf(powf(m_x - other.m_x, 2.0f) + powf(m_y - other.m_y, 2.0f));
+ return AK::hypot<float>(m_x - other.m_x, m_y - other.m_y);
}
[[nodiscard]] Point absolute_relative_distance_to(Point const& other) const
diff --git a/Userland/Libraries/LibGfx/Vector2.h b/Userland/Libraries/LibGfx/Vector2.h
index b4a68a06df..92c8043ff4 100644
--- a/Userland/Libraries/LibGfx/Vector2.h
+++ b/Userland/Libraries/LibGfx/Vector2.h
@@ -6,8 +6,8 @@
#pragma once
+#include <AK/Math.h>
#include <AK/String.h>
-#include <math.h>
namespace Gfx {
template<typename T>
@@ -105,7 +105,7 @@ public:
constexpr T length() const
{
- return sqrt(m_x * m_x + m_y * m_y);
+ return AK::hypot(m_x, m_y);
}
String to_string() const
diff --git a/Userland/Libraries/LibGfx/Vector3.h b/Userland/Libraries/LibGfx/Vector3.h
index 6f6c41d0c7..0e17d2721e 100644
--- a/Userland/Libraries/LibGfx/Vector3.h
+++ b/Userland/Libraries/LibGfx/Vector3.h
@@ -6,8 +6,8 @@
#pragma once
+#include <AK/Math.h>
#include <AK/String.h>
-#include <math.h>
namespace Gfx {
template<typename T>
@@ -121,7 +121,7 @@ public:
constexpr T length() const
{
- return sqrt(m_x * m_x + m_y * m_y + m_z * m_z);
+ return AK::sqrt(m_x * m_x + m_y * m_y + m_z * m_z);
}
String to_string() const
diff --git a/Userland/Libraries/LibGfx/Vector4.h b/Userland/Libraries/LibGfx/Vector4.h
index c7570ea852..7745af60f4 100644
--- a/Userland/Libraries/LibGfx/Vector4.h
+++ b/Userland/Libraries/LibGfx/Vector4.h
@@ -6,8 +6,8 @@
#pragma once
+#include <AK/Math.h>
#include <AK/String.h>
-#include <math.h>
namespace Gfx {
template<typename T>
@@ -121,7 +121,7 @@ public:
constexpr T length() const
{
- return sqrt(m_x * m_x + m_y * m_y + m_z * m_z + m_w * m_w);
+ return AK::sqrt(m_x * m_x + m_y * m_y + m_z * m_z + m_w * m_w);
}
String to_string() const
diff --git a/Userland/Libraries/LibJS/Runtime/NumberConstructor.cpp b/Userland/Libraries/LibJS/Runtime/NumberConstructor.cpp
index 9489f232e4..82770468f4 100644
--- a/Userland/Libraries/LibJS/Runtime/NumberConstructor.cpp
+++ b/Userland/Libraries/LibJS/Runtime/NumberConstructor.cpp
@@ -4,21 +4,21 @@
* SPDX-License-Identifier: BSD-2-Clause
*/
+#include <AK/Math.h>
#include <LibJS/Runtime/AbstractOperations.h>
#include <LibJS/Runtime/Error.h>
#include <LibJS/Runtime/GlobalObject.h>
#include <LibJS/Runtime/NumberConstructor.h>
#include <LibJS/Runtime/NumberObject.h>
-#include <math.h>
#ifdef __clang__
-# define EPSILON_VALUE pow(2, -52)
-# define MAX_SAFE_INTEGER_VALUE pow(2, 53) - 1
-# define MIN_SAFE_INTEGER_VALUE -(pow(2, 53) - 1)
+# define EPSILON_VALUE AK::exp2(-52.)
+# define MAX_SAFE_INTEGER_VALUE AK::exp2(53.) - 1
+# define MIN_SAFE_INTEGER_VALUE -(AK::exp2(53.) - 1)
#else
-constexpr const double EPSILON_VALUE { __builtin_pow(2, -52) };
-constexpr const double MAX_SAFE_INTEGER_VALUE { __builtin_pow(2, 53) - 1 };
-constexpr const double MIN_SAFE_INTEGER_VALUE { -(__builtin_pow(2, 53) - 1) };
+constexpr const double EPSILON_VALUE { __builtin_exp2(-52) };
+constexpr const double MAX_SAFE_INTEGER_VALUE { __builtin_exp2(53) - 1 };
+constexpr const double MIN_SAFE_INTEGER_VALUE { -(__builtin_exp2(53) - 1) };
#endif
namespace JS {
diff --git a/Userland/Libraries/LibPDF/Parser.cpp b/Userland/Libraries/LibPDF/Parser.cpp
index 263ea0a270..c94e982c80 100644
--- a/Userland/Libraries/LibPDF/Parser.cpp
+++ b/Userland/Libraries/LibPDF/Parser.cpp
@@ -14,7 +14,6 @@
#include <LibPDF/Parser.h>
#include <LibTextCodec/Decoder.h>
#include <ctype.h>
-#include <math.h>
namespace PDF {
diff --git a/Userland/Libraries/LibTest/Macros.h b/Userland/Libraries/LibTest/Macros.h
index 6a38eadfcf..9c084e46a3 100644
--- a/Userland/Libraries/LibTest/Macros.h
+++ b/Userland/Libraries/LibTest/Macros.h
@@ -9,6 +9,7 @@
#include <AK/Assertions.h>
#include <AK/CheckedFormatString.h>
+#include <AK/Math.h>
#include <LibTest/CrashTest.h>
namespace AK {
@@ -89,7 +90,7 @@ void current_test_case_did_fail();
auto expect_close_lhs = a; \
auto expect_close_rhs = b; \
auto expect_close_diff = static_cast<double>(expect_close_lhs) - static_cast<double>(expect_close_rhs); \
- if (fabs(expect_close_diff) > 0.0000005) { \
+ if (AK::fabs(expect_close_diff) > 0.0000005) { \
::AK::warnln("\033[31;1mFAIL\033[0m: {}:{}: EXPECT_APPROXIMATE({}, {})" \
" failed with lhs={}, rhs={}, (lhs-rhs)={}", \
__FILE__, __LINE__, #a, #b, expect_close_lhs, expect_close_rhs, expect_close_diff); \
diff --git a/Userland/Libraries/LibVT/TerminalWidget.cpp b/Userland/Libraries/LibVT/TerminalWidget.cpp
index aadb1e5ebf..780496296e 100644
--- a/Userland/Libraries/LibVT/TerminalWidget.cpp
+++ b/Userland/Libraries/LibVT/TerminalWidget.cpp
@@ -31,7 +31,6 @@
#include <LibGfx/StylePainter.h>
#include <ctype.h>
#include <errno.h>
-#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
diff --git a/Userland/Libraries/LibVideo/MatroskaReader.h b/Userland/Libraries/LibVideo/MatroskaReader.h
index d3e0a6742c..33d23c3dd3 100644
--- a/Userland/Libraries/LibVideo/MatroskaReader.h
+++ b/Userland/Libraries/LibVideo/MatroskaReader.h
@@ -8,10 +8,10 @@
#include "MatroskaDocument.h"
#include <AK/Debug.h>
+#include <AK/Math.h>
#include <AK/NonnullOwnPtrVector.h>
#include <AK/Optional.h>
#include <AK/OwnPtr.h>
-#include <math.h>
namespace Video {
@@ -122,7 +122,7 @@ private:
u8 next_octet = read_octet();
result = (result << 8u) | next_octet;
}
- result -= pow(2, length * 7 - 1) - 1;
+ result -= AK::exp2<i64>(length * 7 - 1) - 1;
return result;
}
diff --git a/Userland/Utilities/du.cpp b/Userland/Utilities/du.cpp
index 4f218c9a0f..1782e56355 100644
--- a/Userland/Utilities/du.cpp
+++ b/Userland/Utilities/du.cpp
@@ -17,7 +17,6 @@
#include <LibCore/Object.h>
#include <inttypes.h>
#include <limits.h>
-#include <math.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
diff --git a/Userland/Utilities/functrace.cpp b/Userland/Utilities/functrace.cpp
index f94a7e2018..6cdc9a4389 100644
--- a/Userland/Utilities/functrace.cpp
+++ b/Userland/Utilities/functrace.cpp
@@ -17,7 +17,6 @@
#include <LibELF/Image.h>
#include <LibX86/Disassembler.h>
#include <LibX86/Instruction.h>
-#include <math.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/Userland/Utilities/ntpquery.cpp b/Userland/Utilities/ntpquery.cpp
index 802d16a054..a4c36ae616 100644
--- a/Userland/Utilities/ntpquery.cpp
+++ b/Userland/Utilities/ntpquery.cpp
@@ -292,7 +292,7 @@ int main(int argc, char** argv)
NtpTimestamp T3 = transmit_timestamp;
NtpTimestamp T4 = destination_timestamp;
auto timestamp_difference_in_seconds = [](NtpTimestamp from, NtpTimestamp to) {
- return static_cast<int64_t>(to - from) / pow(2.0, 32);
+ return static_cast<i64>(to - from) >> 32;
};
// The network round-trip time of the request.