Какой самый быстрый способ инициализировать все элементы в массиве в NaN? - PullRequest
2 голосов
/ 20 февраля 2010

В C # .NET, какой самый быстрый способ инициализировать массив значений типа double с NaN?

Вот как я сейчас инициализирую массив со многими элементами.

int length = array.Length;
for(int i = 0; i < length; i++)
{
    array[i] = double.NaN;
}

Есть ли более быстрый путь?

Ответы [ 2 ]

2 голосов
/ 21 февраля 2010

Заполнение массива байтовыми значениями 0xff дает NaN. Попробуйте этот код, чтобы увидеть, что является самым быстрым на вашей машине. Memset () - это не всегда чёрт возьми:

using System;
using System.Runtime.InteropServices;
using System.Diagnostics;

class Program {
  static void Main(string[] args) {
    var arr = new double[10 * 1024 * 1024];
    for (int loop = 1; loop < 20; ++loop) {
      var sw1 = Stopwatch.StartNew();
      for (int ix = 0; ix < arr.Length; ++ix)
        arr[ix] = double.NaN;
      sw1.Stop();
      var sw2 = Stopwatch.StartNew();
      memset(arr, 0xff, 8 * arr.Length);
      sw2.Stop();
      Console.WriteLine("Loop: {0}, memset: {1}", sw1.ElapsedMilliseconds, sw2.ElapsedMilliseconds);
    }
    Console.ReadLine();
  }
  [DllImport("msvcrt.dll")]
  private static extern void memset(double[] array, int value, int cnt);
}
1 голос
/ 20 февраля 2010

Вы можете многопоточность, но это все еще проблема O (N).

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