Значение, хранящее в двойном, кажется случайным образом изменяется, когда присваивается указатель на двойной [закрытый]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Значение, хранящее в двойном, кажется случайным образом изменяется, когда присваивается указатель на двойной [закрытый]

Сообщение Anonymous »

Я снова начинаю собирать C ++ и пишу программу для выполнения некоторых математических функций для векторов (физика, а не массивы). При создании класса представлять 2D -вектор, я решил включить как компоненты x/y вектора, так и величина/угол, но для того, чтобы переменные величины/угла были нулевыми или что -то подобное по умолчанию. Выходя из этого поста: как хранить какой -то «нулевой» в двойной или int -переменной C ++?,
Я решил использовать указатель в двойной для сохранения значений величины /угла, чтобы они могли быть установлены в Nullptr, когда они не используются. При написании функции для преобразования компонентов x/y в угол и величину я использовал функцию SQRT из CMATH. Для конкретных компонентов, в которые я ввел (3,4), величина должна была вернуться как 5, поскольку величина рассчитывается с использованием теоремы Пифагора. Тем не менее, он возвращался как 4,9 ..... или 5,1 ....., и я подумал, что это было просто из -за ошибок округления или отсутствия точности в представлении. Оказывается, функция SQRT () возвращалась 5, как и ожидалось, но по какой -то причине, когда это значение было назначено указателю, он случайным образом выбрал 4,9 или 5,1 и вместо этого удерживал это. Вот код: < /p>

Код: Выделить всё

void Vector2D::SetMagnitudeAndAngleFromXY() {
double temp = sqrt(pow(x_, 2) + pow(y_, 2)); //The sqrt() function returns 5
magnitude_ = &temp; //Here is where the 5 changes to 5.1 or 4.9

//Code to calculate angle
...
В конце концов я решил, что все, что происходит здесь, не стоит иметь возможности назначить нулевое значение на магнитуду/угол и переключился на использование двойных переменных вместо указателей, но я все равно хотел бы знать, что происходит. Я использую компилятор G ++ версию 13.3.0 на Ubuntu 24.04.2 lts.

Подробнее здесь: https://stackoverflow.com/questions/796 ... ned-to-a-p
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»