Страница 1 из 1

Проблема со сравниванием переменных

СообщениеДобавлено: 20 июн 2018, 10:57
LordWerewolf
Добрый день, господа!
Не могу разобраться, может кто сталкивался с подобным и знает как решить проблему?
Нужно сравнить две переменные типа float.
Сравниваю так:
Синтаксис:
Используется csharp
Mathf.Approximately(angleSector, -90f)

Но такой метод работает только при положительном значении переменных.
Когда сравниваю отрицательные, ничего не выходит.
Где я туплю?

Re: Проблема со сравниванием переменных

СообщениеДобавлено: 20 июн 2018, 11:27
archibalt
А просто if(a==b){} не подходит? Нужно именно приблизительно?

Re: Проблема со сравниванием переменных

СообщениеДобавлено: 20 июн 2018, 12:05
1max1
Когда сравниваю отрицательные, ничего не выходит.

Mathf.Approximately(Mathf.Abs(angleSector), Mathf.Abs(-90f));

Re: Проблема со сравниванием переменных

СообщениеДобавлено: 20 июн 2018, 12:22
LordWerewolf
archibalt писал(а):А просто if(a==b){} не подходит? Нужно именно приблизительно?

нет, там может быть небольшая погрешность

1max1 писал(а):
Когда сравниваю отрицательные, ничего не выходит.

Mathf.Approximately(Mathf.Abs(angleSector), Mathf.Abs(-90f));


не уверен, что Abs подойдет... что будет, если у меня две проверки, одна -90f а другая 90f ?
Разве Mathf.Abs не будет оба значения видеть как 90f ?

Re: Проблема со сравниванием переменных

СообщениеДобавлено: 20 июн 2018, 12:30
ilkalawson
Синтаксис:
Используется csharp
float value = angleSector - (-90f);

if (value <= 0.01f) {

}


?

Re: Проблема со сравниванием переменных

СообщениеДобавлено: 20 июн 2018, 13:03
1max1
float a = angleSector;
float b = -90f;

float dist = Mathf.Abs(a - b);

if (dist <= 0.00001f) ...

Re: Проблема со сравниванием переменных

СообщениеДобавлено: 20 июн 2018, 13:12
LordWerewolf
ilkalawson писал(а):
Синтаксис:
Используется csharp
float value = angleSector - (-90f);

if (value <= 0.01f) {

}


?


Мне надо сравнить 21 значение... предлагаете для каждого значения строить такую конструкцию?
Мне кажется это слишком... а если у меня этих значений 100 или больше будет?

Но спасибо за вариант!

Re: Проблема со сравниванием переменных

СообщениеДобавлено: 20 июн 2018, 13:27
alt3d
Первый раз слышу чтобы Mathf.Approximately работал только с положительными числами.
Написал тест - все работает, возвращает true.
Или я чего-то не понял?

Синтаксис:
Используется csharp
var a = -10f;
var b = 10 * -1f;
Debug.Log(Mathf.Approximately(a, b));
 

Re: Проблема со сравниванием переменных

СообщениеДобавлено: 20 июн 2018, 13:29
1max1
предлагаете для каждого значения строить такую конструкцию?

А отдельный метод написать религия не позволяет видимо?

Re: Проблема со сравниванием переменных

СообщениеДобавлено: 20 июн 2018, 13:36
LordWerewolf
1max1 писал(а):
предлагаете для каждого значения строить такую конструкцию?

А отдельный метод написать религия не позволяет видимо?


да, ступил... сорри ;)

Вопрос закрыт, Всем спасибо за участие!

Re: Проблема со сравниванием переменных

СообщениеДобавлено: 20 июн 2018, 13:38
Dewa1s
Синтаксис:
Используется csharp
public static class Extension
    {
        public static bool AlmostEquals(this float float1, float float2, float precision = 2)
        {
            float epsilon = Mathf.Pow(10.0f, -precision);
            return (Math.Abs(float1 - float2) <= epsilon);
        }
    }

Соответственно, работать будет так

Синтаксис:
Используется csharp
if ( 90.0f.AlmostEquals(90.0f))
{

}
//Либо с ручным указание количества точек после запятой
if ( 90.0f.AlmostEquals(90.0f,2))
{

}

Re: Проблема со сравниванием переменных

СообщениеДобавлено: 20 июн 2018, 14:35
Anonymyx
Велосипедники, Approximately прекрасно все сравнивает, если знаки верно поставить, там такая же реализация через Abs(a-b) < epsilon, и значение эпсилона тоже есть в классе Mathf.

Синтаксис:
Используется csharp
public static bool Approximately(float a, float b)
    {
      return (double) Mathf.Abs(b - a) < (double) Mathf.Max(1E-06f * Mathf.Max(Mathf.Abs(a), Mathf.Abs(b)), Mathf.Epsilon * 8f);
}