Быстрее обнаружить почти нули и заменить их на 0.0 или оставить их в виде небольших чисел?

Я программирую программу численного анализа, и иногда исчисление дает некоторые из коэффициентов действительно малых чисел, т.е. a0=1.234542e-12

Если я вычислю массив из 10 значений (из которых 6 из них являются небольшими числами), а затем умножу каждое из них на t ^ x (просто в качестве примера)
если x = 1: 10, что быстрее в вычислительном отношении?

  • просто оставьте небольшое число как есть
  • Определить числа ниже threshold и заменить их на 0,0

Вопрос в основном потому, что, возможно, компилятор просто не делает исчисление числа, умноженного на 0, потому что оно всегда равно 0, или он может просто умножить его, и я делаю программу медленнее для добавления if условные просто проверить, является ли число 0 или нет.

0

Решение

Если вы спрашиваете, как вам кажется, какая из этих двух операций выполняется быстрее:

  1. Умножение вектора чисел, включая те, которые близки к 0,0.
  2. Перебирая вектор чисел, устанавливая на 0,0 те, которые близки к 0,0, а затем умножая вектор.

хорошо, я думаю, что в пределе 1 будет быстрее, чем 2.

3

Другие решения

Я предполагаю, что массив не является константой, а является промежуточным результатом вашей программы.

Тогда не было бы абсолютно никакой разницы в скорости между умножением на 0 и умножением на небольшое число, потому что машинный код, выполняемый в обоих случаях, абсолютно одинаков. Компилятор не имеет представления о содержимом массива.

2

По вопросам рекламы [email protected]