Скоростное округление чисел - 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; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д