“Безразмерный” double C++

218
06 января 2019, 02:20

Хотел поинтересоваться, писал свои матрицы, когда написал функцию возвращения детерминанта ради шутки решил вписать размеры 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 дает стабильно одно и тоже число

Answer 1

Наконец выяснилось, в чем проблема :)

Просто точных знаков там наберется штук 15, только и всего. Это - не точное значение, просто вы попросили его вывести так - вот компилятор и рад стараться.

Вот простенький код:

double f = 1.0;
for(int i = 1; i <= 100; ++i) f*=i;
printf("%lf\n",f);

Вот как выглядит 100! при таком вычислении и его точное значение - сами посчитайте, сколько цифр совпадает... Я там пробельчики добавил :)

933262154439441 02188325606108575267240944254854960571509166910400407995064242937148632694030450512898042989296944474898258737204311236641477561877016501813248.000000
933262154439441 52681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

Весь вопрос в том, как правильно трактовать то, что вы видите на экране...

READ ALSO
Как посчитать Pixel Per Line (ширину изображения)

Как посчитать Pixel Per Line (ширину изображения)

У меня в памяти чужого процесса есть изображениеЯ знаю начальный адрес, мне нужно узнать ширину этого изображения, если 1 byte = 1 pixel

196
Какие поставщики std::chrono::time_point существуют в С++?

Какие поставщики std::chrono::time_point существуют в С++?

Пытаюсь решить эту проблему уже сутки, но пока ничего путного не получилось (Пришла в голову идея откатывать системные часы в начало суток,...

201
Не получается QPixmap правильно отобразить в QLabel

Не получается QPixmap правильно отобразить в QLabel

Пытался в QLabel положить нарисованную картинку, но картинка оказалась очень большая, а Qt её не умеет сжимать

238
Кракозябры сообщений компилятора в QtCreator

Кракозябры сообщений компилятора в QtCreator

При использовании компилятора Microsoft в Qt-проекте в окне сборки выводятся сообщения об ошибках и предупреждениях с поломанной кодировкойНапример:

179