Согласно GDB эта строка вызывает ошибку сегментации
((double) rand()/(double) (RAND_MAX)) * (r*2)
но это совершенно нормально
((float) rand()/(float) (RAND_MAX)) * (r*2)
Я могу обходиться без поплавков, но это меня беспокоит. Я делаю что-то не так или rand()
неспособен справиться с двойниками.
Обратите внимание, что в контексте верхнего примера все вхождения float
были изменены на double
.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct cord {
/* float or double */
float x;
float y;
};
int main() {
float r = 3.0;
int amount = 1000000;
struct cord cords[amount];
srand(time(NULL));
for (int i = 0; i < amount; i++) {
cords[i] = (struct cord) {
/* Segfault occurs when (float) is replaced with (double) */
((float) rand()/(float) (RAND_MAX)) * (r*2),
((float) rand()/(float) (RAND_MAX)) * (r*2)
};
}
}