Hacer esto:Float Arc4random?
float x = arc4random() % 100;
devuelve un resultado decente en un número entre 0 y 100.
Pero hacer esto:
float x = (arc4random() % 100)/100;
devuelve 0. ¿Cómo puedo conseguir que vuelva una valor flotante?
Hacer esto:Float Arc4random?
float x = arc4random() % 100;
devuelve un resultado decente en un número entre 0 y 100.
Pero hacer esto:
float x = (arc4random() % 100)/100;
devuelve 0. ¿Cómo puedo conseguir que vuelva una valor flotante?
Simplemente, está haciendo división de enteros, en lugar de división de punto flotante, por lo que acaba de obtener un resultado truncado (.123 se trunca a 0, por ejemplo). Pruebe
float x = (arc4random() % 100)/100.0f;
Está dividiendo un int por un int, lo que da un int. Necesita lanzar a un flotante:
float x = (arc4random() % 100)/(float)100;
Consulte también mi comentario sobre el operador del módulo.
En Swift:
Float(arc4random() % 100)/100
Para obtener una división flotador, en lugar de una división entera:
float x = arc4random() % 100/100.f;
Pero tenga cuidado, usando % 100
sólo le dará un valor entre 0 y 99, por lo dividirlo por 100.f solo producirá un valor aleatorio entre 0.00f y 0.99f.
Mejor, para conseguir un flotador aleatorio entre 0 y 1:
float x = arc4random() % 101/100.f;
Aún mejor, para evitar el sesgo módulo:
float x = arc4random_uniform(101)/100.f;
mejor, para evitar el sesgo de precisión:
float x = (float)arc4random()/UINT32_MAX;
Creo que en Swift sería:
let x = Float(arc4random())/UINT32_MAX
Use 'arc4random_uniform (int)' en lugar de una construcción de módulo. Consulte la página man ('arc4random (3)') por qué. –
arc4random_uniform se agregó en 4.3. También usaría esto en lugar de mi respuesta a continuación si puede. – bensnider
La primera línea devuelve un int entre 0 y 99. –