2010-09-16 3 views

Répondre

15

Vous pouvez essayer:

float RandomBetween(float smallNumber, float bigNumber) 
{ 
    float diff = bigNumber - smallNumber; 
    return (((float) rand()/RAND_MAX) * diff) + smallNumber; 
} 
4

Vous devriez être en mesure d'utiliser quelque chose comme:

double x = ((double)rand())/((double)RAND_MAX)/2.0 + 0.5; 

La division par RAND_MAX vous donne une valeur de 0 à 1, divisant par deux gouttes la aller de 0 à 0,5, puis ajouter 0.5 vous donne 0.5 à 1. (inclus à l'extrémité inférieure et exclusif à l'extrémité supérieure).

1

Une chose comme ci-dessous vous aidera.

double random(double start, double end) 
{ 
    double moduleValue = ((end - start) *10); //1.0 - .5 --> .5 -->> 5 
    double randum = rand() % moduleValue; // restrict the random to your range 
    //if rendum == 2 --> .2 + .5 --> .7 in the range .5 -- 1.0 

    return (randum/10) + start; // make your number to be in your range 
} 

Code d'essai pour la clarification

#include <stdio.h> 
#define RAND_NUMBER 14 
#define INT_FLAG 10 
int main (int argc, const char * argv[]) { 
    // insert code here... 
    double start = .5; 
    double end = 1.0; 

    double moduleValue = ((end - start) * INT_FLAG); 

    int randum = (RAND_NUMBER/moduleValue); 

    double result = ((double)randum/INT_FLAG) + start; 
    printf("%f",result); 
    printf("Hello, World!\n"); 
    return 0; 
} 
+0

est-ce pas restreindre artificiellement à pas de 0,1? Pourquoi feriez-vous cela plutôt que d'utiliser la double gamme complète? – paxdiablo

+0

vérifier le code de clarification --- quand vous essayez de diviser le .5 il agit comme 1/2 en mathématiques à cause de laquelle le nombre généré ne sera pas dans votre gamme –

0
#include<stdio.h> 
#include<stdlib.h> 
main() 
{ 
int i; 
double b,n; 
srand(getpid()); 

n=rand()%51+50; 
b=n/100; 

printf("%f\n",b); 
} 
Questions connexes