Почему C++ определяет норму, поскольку евклидова норма придала квадратную форму

В нормальном приложении Windows на 32 бита процесс только имеет 2 ГБ адресуемой памяти. Это не важно на сумму физической памяти, которая доступна.

Так доступные 2 ГБ, но 1.5 макс., которое можно выделить. Ключ - то, что Ваш код не является единственным кодом, работающим в процессе. Другие.5 ГБ являются, вероятно, CLR плюс фрагментация в процессе.

Обновление: в.Net 4.5 в процессе на 64 бита у Вас могут быть большие массивы, если установка gcAllowVeryLargeObjects включена:

На 64-разрядных платформах, включает массивы, которые больше, чем 2 гигабайта (ГБ) в общем размере. Максимальное число элементов в массиве является UInt32. MaxValue.


  
    
  

15
задан sth 8 August 2010 в 17:12
поделиться

2 ответа

Использование C ++ слова «норма» довольно сбивает с толку, поскольку большинство людей когда-либо сталкивались с нормами только в контексте векторных пространств. Если вы рассматриваете комплексные числа как векторное пространство над вещественными числами, это определенно не норма. Честно говоря, функция std :: norm () вычисляет так называемую Норму поля из комплексных чисел в вещественные числа.

К счастью, есть функция std :: abs () , который делает то, что вы хотите.

13
ответ дан 1 December 2019 в 04:01
поделиться

Кстати, евклидова норма в квадрате может быть полезна в качестве оптимизации, особенно в игровой физике; если вы хотите сравнить величины/расстояния, или по какой-либо другой причине вам не нужна линейность, то вы можете работать с квадратами расстояний, а не с фактическими расстояниями, и избегать вычисления квадратных корней.

norm(v1) < norm(v2)         instead of   abs(v1) < abs(v2)
norm(v) < CONSTANT_SQUARED  instead of   abs(v) < CONSTANT

(используя тот факт, что abs() является величиной, как упоминалось в другом ответе)

5
ответ дан 1 December 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: