C: ошибка преобразования из int в float или double - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь сгенерировать случайное число от 1 до 0 для школьного проекта. Несколько мест говорят, что это должно быть сделано с использованием rand () и приведением к float. Что-то вроде следующего:

float x = ((float)rand()/(float)(RAND_MAX)) * a;

Тем не менее, я обнаружил, что всякий раз, когда я бросаю из int для float, число неверно. Эта проблема приводит к тому, что я получаю неправильные ответы, используя код выше

Код:

int rotlat = rand() % 1000;
double newrot = (double) rotlat;
printf("rotational latency: %d\n", rotlat);
printf("new rotational latency: %d\n", newrot);

Вывод:

rotational latency: 533
new rotational latency: -1841876320

rotational latency: 279
new rotational latency: -1841876320

rotational latency: 148
new rotational latency: -1841876320

rotational latency: 167
new rotational latency: -1841876320

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Попробуйте:

printf("new rotational latency: %g\n", newrot); //%g

Директива %d предназначена для десятичных целых чисел, а не для двойных.

0 голосов
/ 24 апреля 2020

Хорошо. Я собираюсь go убить себя сейчас.

...