Скоростное округление чисел - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Есть деление целых чисел, но результат должен быть не усечён, а округлён. Самое очевидное решение:
int a = 1;
int b = 2;
int c = (int)Math.Round((double)a / (double)b, MidpointRounding.AwayFromZero);
Но оно не самое быстрое. Как можно ускорить?

Решение задачи: «Скоростное округление чисел»

textual
Листинг программы
using System;
using System.Diagnostics;
using System.Runtime.CompilerServices;
 
namespace Test
{
   class Program
   {
      static void Main(string[] args)
      {
         long pass = 1000000000;
         int a = GetA();
         int b = GetB();
         int c = 0;
 
         Stopwatch sw1 = Stopwatch.StartNew();
         for(long i = 0; i < pass; ++i)
         {
            c = (a * 2 / b + 1) / 2;
         }
         sw1.Stop();
 
         Stopwatch sw2 = Stopwatch.StartNew();
         for(long i = 0; i < pass; ++i)
         {
            c = (int)Math.Round((double)a / (double)b, MidpointRounding.AwayFromZero);
         }
         sw2.Stop();
 
         Console.WriteLine($"зайчик: {sw1.Elapsed}");
         Console.WriteLine($"черепашка: {sw2.Elapsed}");
         Console.ReadKey();
         GC.KeepAlive(c);
      }
 
      [MethodImpl(MethodImplOptions.NoInlining)]
      private static int GetA() => 500;
 
      [MethodImpl(MethodImplOptions.NoInlining)]
      private static int GetB() => 1000;
   }
}

Оцени полезность:

13   голосов , оценка 4.231 из 5
Похожие ответы