The lmp90100_evb sample included an implementation of double sqrt, and the on_off_level_lighting_vnd_app sample included an implementation of float sqrtf. Move that code into minimal libc instead of requiring applications to hand-roll their own version. Signed-off-by: Keith Packard <keithp@keithp.com>
30 lines
400 B
C
30 lines
400 B
C
/*
|
|
* Copyright (c) 2018 Vikrant More
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include <math.h>
|
|
|
|
#define MINDIFF 2.25e-308
|
|
|
|
float sqrtf(float square)
|
|
{
|
|
float root, last, diff;
|
|
|
|
root = square / 3.0;
|
|
diff = 1;
|
|
|
|
if (square <= 0) {
|
|
return 0;
|
|
}
|
|
|
|
do {
|
|
last = root;
|
|
root = (root + square / root) / 2.0;
|
|
diff = root - last;
|
|
} while (diff > MINDIFF || diff < -MINDIFF);
|
|
|
|
return root;
|
|
}
|