Инициализация массива в ноль.
Когда J объявляется двойным
массив - это значения массива
инициализируется до нуля? Если нет, есть ли
быстрый способ установить все элементы в
ноль?
Это зависит от того, где расположен массив. Если он объявлен в области видимости файла или как статический, то стандарт C гарантирует, что все элементы установлены в ноль. То же самое гарантируется, если вы установите первый элемент в значение при инициализации, то есть:
double J[151][151] = {0}; /* set first element to zero */
Устанавливая первый элемент в что-либо, стандарт C гарантирует, что все остальные элементы в массиве будут установлены в ноль, как если бы массив был статически размещен.
Практически для этого конкретного случая я очень сомневаюсь, что будет разумно выделить 151 * 151 * sizeof (double) байтов в стеке независимо от того, какую систему вы используете. Скорее всего, вам придется распределять его динамически, и тогда ничего из вышеперечисленного не имеет значения. Затем вы должны использовать memset (), чтобы установить все байты в ноль.
В
Относительно медленный цикл ниже
доступ к матрице, которая содержится
в структуре «данных» медленный
компонент или это что-то еще
о петле?
Вы должны убедиться, что вызываемая из него функция является встроенной. В противном случае вы ничего не можете сделать, чтобы оптимизировать цикл: то, что является оптимальным, сильно зависит от системы (например, как строится физическая кэш-память). Лучше оставить такую оптимизацию для компилятора.
Конечно, вы могли бы запутать код с помощью ручных оптимизационных операций, таких как обратный отсчет до нуля, а не вверх, или использование ++ i, а не i ++ и т. Д. И т. Д. Но компилятор действительно должен уметь обрабатывать такие вещи за вас.
Что касается сложения матриц, я не знаю математически наиболее эффективного способа, но подозреваю, что он не имеет никакого отношения к эффективности кода. Большой вор здесь - двойной тип. Если вам не нужна высокая точность, я бы рассмотрел использование float или int для ускорения алгоритма.