2017-01-12 3 views
-4

Мне присваивается код, который делит элементы [A] в [A] {X} = [B] на 10^4 при сборке матрицы [A]. Затем он также делит массив результатов на это число для вычисления правильного значения. Я не понимаю, почему это нужно сделать? Имеет ли двойная точность ограничение чисел целого, которое она может удерживать; поэтому создатель этого кода хотел увеличить число плавающих цифр? Или, может быть, он неправильно понял концепцию двойной точности?Какова логика разделения массивов матрицы двойной точности на большое количество, прежде чем отправить эту матрицу решателю?

+1

Что означает «сборка»? где код? Это C++ или Fortran? почему оба тега? Будете ли вы добавлять теги для всех языков, на которых можно встретить матрицу? –

+0

@ VladimirF Посредством сборки я подразумеваю процесс добавления членов aij к матрице [A] с соответствующими i & j. – Saeid

+0

Программа находится в C++ и Fortran. – Saeid

ответ

0

Разделение на некоторую константу не улучшит точность решения, так как числа с плавающей запятой имеют представление экспоненты. Таким образом, масштабирование на некоторое большое число будет в значительной степени влиять на экспоненту и в меньшей степени значительными битами. Численно сложная часть при решении добавляет числа с плавающей запятой разных порядков, так как это повлияет на количество значимых бит. Однако это не влияет на глобальное масштабирование, так как разница показателей остается неизменной. Аналогично, деление, умножение и квадратный корень не влияют.

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

0

Без просмотра кода трудно сказать.

Иногда масштабирование выполнялось по причинам IO, а не по вычислительным причинам.

Если «* 1E-4» - это одинарная точность, то, скорее всего, это делается для дискретизации входящих данных, и после этого вычисления могут иметь двойную точность.

Очевидно, что вид кода может помочь.