Разница между 2 числами - PullRequest
       12

Разница между 2 числами

58 голосов
/ 04 декабря 2008

Мне нужен идеальный алгоритм или функция C # для вычисления разницы (расстояния) между двумя десятичными числами.

Например, разница между:
100 и 25 - 75
100 и -25 - 125
-100 и -115 - 15
-500 и 100 is 600

Есть ли функция C # или очень элегантный алгоритм для вычисления этого, или мне нужно идти и обрабатывать каждый случай отдельно с помощью , если с.

Если есть такая функция или алгоритм, какой это?

Ответы [ 4 ]

106 голосов
/ 04 декабря 2008

Вы можете сделать это так

public decimal FindDifference(decimal nr1, decimal nr2)
{
  return Math.Abs(nr1 - nr2);
}
30 голосов
/ 04 декабря 2008
result = Math.Abs(value1 - value2);
21 голосов
/ 08 декабря 2008

Просто добавлю это, как никто не написал здесь:

Пока вы наверняка можете использовать

Math.Abs(number1 - number2);

что является самым простым решением (и принятым ответом), интересно, никто не написал, что на самом деле делает Abs. Вот решение, которое работает на Java, C, C # и любом другом языке с синтаксисом C, подобным :

int result = number1 - number2;
if (result < 0) {
    result *= -1;
}

Это так просто. Вы также можете написать это так:

int result = number1 > number2 ? number1 - number2 : number2 - number1;

Последний может быть еще быстрее после компиляции; оба имеют одно вычитание if и одно, но в некоторых случаях первое имеет умножение, а в последнем нет. Почему только в некоторых случаях? У некоторых процессоров есть операция «знак подкачки», и компилятор распознает, что делает *= -1, он просто меняет знак, поэтому вместо умножения он выдаст операцию знака подстановки для процессоров, которые его предлагают, и эта операция Операция ЦП может получить (обычно один тактовый цикл).

Первый пример кода на самом деле делает то, что делает Abs в большинстве реализаций, чтобы использовать «знак свопа» там, где это поддерживается, последний будет быстрее на процессорах, у которых нет «знака свопа» и если умножения дороже, чем дополнения (на современных процессорах они часто одинаково быстры).

5 голосов
/ 04 декабря 2008

Я не думаю, что это возможно в C #, вам, возможно, придется взглянуть на реализацию в Ассемблере

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...