質問: min + (double)(rand() / (max - min + 1.0)) * (RAND_MAX + 1.0); return dt; } int main(void) { printf("%f\n", rnd_generate(-0.05, 0.05)); return 0; } ``` ### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答: r.c ``` #include #include double rnd_generate(double range_0, double range_1) { double t = (double)rand() / RAND_MAX; return range_0 + (range_1 - range_0) * t; } int main(void) { for (int i = 0; i < 10; i++) { printf("%f\n", rnd_generate(-0.05, 0.05)); } printf("\n"); for (int i = 0; i < 10; i++) { printf("%f\n", rnd_generate(0.05, -0.05)); } printf("\n"); for (int i = 0; i < 10; i++) { printf("%f\n", rnd_generate(0.05, 0.05)); } printf("\n"); return 0; } ``` 実行例 !イメージ説明 範囲指定の数値の大小関係が逆転していたり、同じ値を指定したときにも、範囲中の乱数が得られることがわかります。 rnd_generate()中の t は 0.0 ,, 1.0 の範囲の値になります。 t = 0 なら、range_0 を返します。 t = 1 なら range_1 を返します。 t = 0.5 なら range_0 から renge_1 へ 半分だけ進んだ値を返します。