Потеря точности в C++

Код написан на C++ для генерации случайного числа как

X = (((double) rand() / (RAND_MAX))-0.500000000000000);
    Y = (((double) rand() / (RAND_MAX))-0.500000000000000);
    Z = (((double) rand() / (RAND_MAX))-0.500000000000000);
    mod = sqrt((X*X)+(Y*Y)+(Z*Z));
    //cout<< mod << " " ;
    x= X*rmax/mod;
    y= Y*rmax/mod;
    z= Z*rmax/mod;

Эта часть сценария генерирует вектор направления единицы для следующего шага случайного обхода в модели агрегации. Полученная точность, несмотря на то, что я использовал тип данных double, составляет до 6 или 7 десятичных знаков, например. вывод)

X=-0.399531, Y=, 0.318677, Z=0.4281
    X=-0.0994908, Y=, -0.317307, Z=0.30371
    X=-0.174996, Y=, -0.034593, Z=-0.315512
    X=-0.268187, Y=, -0.218015, Z=-0.147229
    X=-0.282077, Y=, 0.0556219, Z=-0.177957
    X=0.351115, Y=, -0.251124, Z=-0.191628

Программа нуждается в точности по крайней мере 10-12 десятичных знаков.

Начальное число, которое я использовал для RNG(генератор случайных чисел): "srand (time (NULL))"; программа должна генерировать от 50 000 до 100 000 шагов для каждой частицы, и поэтому сгенерированные случайные числа должны быть непериодическими и непериодическими. повторяется в поведении в этом диапазоне.

Пожалуйста, предложите мне способ получить больше точности после десятичных чисел.

0 ответов

Другие вопросы по тегам