Хотел поинтересоваться, писал свои матрицы, когда написал функцию возвращения детерминанта ради шутки решил вписать размеры 100x100, 150x150 и увидел интересную картину, вместо случайных чисел он начал из раза в раз выдавать стабильные значения, большие +e100 и в контрольных значениях указан. sizeof стабильно выдает 8 байт для double. Вот код, не знаю, поможет он чем-то:
int main(void)
{
const int size = 150;
Matrix m(size, size);
m = Matrix(size, size);
for (int i(0); i < size; i++)
for (int j(0); j < size; j++)
m[i][j] = rand() % 10;
printf("Det: %lf, %d\n", m.Det(), sizeof(m.Det()));
}
Вот вывод:
Det: -72307913218522825190636603121783109533943228668406806586004572432437176480990402652098139729226027559410013518523090670966620728946993881767856223758918815571231759806000656978596226673131379515981824.000000, 8
Время не обнулял, но при одной сессии Visual Studio дает стабильно одно и тоже число
Наконец выяснилось, в чем проблема :)
Просто точных знаков там наберется штук 15, только и всего. Это - не точное значение, просто вы попросили его вывести так - вот компилятор и рад стараться.
Вот простенький код:
double f = 1.0;
for(int i = 1; i <= 100; ++i) f*=i;
printf("%lf\n",f);
Вот как выглядит 100! при таком вычислении и его точное значение - сами посчитайте, сколько цифр совпадает... Я там пробельчики добавил :)
933262154439441 02188325606108575267240944254854960571509166910400407995064242937148632694030450512898042989296944474898258737204311236641477561877016501813248.000000
933262154439441 52681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
Весь вопрос в том, как правильно трактовать то, что вы видите на экране...
Сборка персонального компьютера от Artline: умный выбор для современных пользователей