Отказ от функций getWeightedSum в пользу appendScaled; оптимизация версоров / Replacing of getWeightedSum onto appendScaled; versor optimization

This commit is contained in:
Andrey Pokidov 2024-11-20 01:21:40 +07:00
parent 7bd9c07f17
commit e354b2425c
13 changed files with 331 additions and 835 deletions

View file

@ -6,6 +6,14 @@
#define TEST_RESULT_SUCCES 0
#define TEST_RESULT_FAILED 100
#define TEST_SP_EPSYLON 1E-6f
#define TEST_SP_TWO_EPSYLON 2E-6f
#define TEST_SP_SQUARE_EPSYLON 1E-12f
#define TEST_DP_EPSYLON 1E-13f
#define TEST_DP_TWO_EPSYLON 2E-13f
#define TEST_DP_SQUARE_EPSYLON 1E-26f
void print_test_section(const char * name);
void print_test_name(const char * name);
@ -14,4 +22,32 @@ void print_test_success();
void print_test_failed();
inline int test_sp_are_equal(const float value1, const float value2, const float epsylon)
{
if (-1.0f <= value1 && value1 <= 1.0f) {
const float difference = value1 - value2;
return -epsylon <= difference && difference <= epsylon;
}
if (value1 > 0.0f) {
return value1 <= value2 * (1.0f + epsylon) && value2 <= value1 * (1.0f + epsylon);
}
return value1 * (1.0f + epsylon) <= value2 && value2 * (1.0f + epsylon) <= value1;
}
inline int test_dp_are_equal(const double value1, const double value2, const double epsylon)
{
if (-1.0 <= value1 && value1 <= 1.0) {
const double difference = value1 - value2;
return -epsylon <= difference && difference <= epsylon;
}
if (value1 > 0.0) {
return value1 <= value2 * (1.0 + epsylon) && value2 <= value1 * (1.0 + epsylon);
}
return value1 * (1.0 + epsylon) <= value2 && value2 * (1.0 + epsylon) <= value1;
}
#endif