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