在iPhone上,如何生成15位十进制的熵?
我想生成一个介于在iPhone上,如何生成15位十进制的熵?,iphone,objective-c,random,Iphone,Objective C,Random,我想生成一个介于0.000000000000000和0.999999999999之间的随机浮点数。我正在使用此代码,但它不会生成我想要的值: int i; for (i = 0; i < 9; i++) { float num = (random() / (float) LONG_MAX) ; NSLog(@"Show Light:= %f",num); } inti; 对于(i=0;i
0.000000000000000
和0.999999999999
之间的随机浮点数。我正在使用此代码,但它不会生成我想要的值:
int i;
for (i = 0; i < 9; i++)
{
float num = (random() / (float) LONG_MAX) ;
NSLog(@"Show Light:= %f",num);
}
inti;
对于(i=0;i<9;i++)
{
浮点数=(随机()/(浮点)长\u最大值);
NSLog(@“显示灯光:=%f”,num);
}
我能做些什么来让它工作?我已经看到了,但我没有正确理解它。随机函数只生成一个介于0和2^31之间的数字,最大值为10位 如果你想要15个数字,你必须调用它几次,然后进行一些连接,得到15个数字 另外,给定random返回一个长整数,即给定要对其执行的操作,将其转换为浮点似乎没有意义。如果我的记忆正确,请将它转换为您提供的链接中的格式为%ld的字符串
对不起,自从我写这篇文章以来,问题已经改变了。Float没有给您足够的小数点,您需要使用double,而不是随机函数只生成一个介于0和2^31之间的数字,最多10位 如果你想要15个数字,你必须调用它几次,然后进行一些连接,得到15个数字 另外,给定random返回一个长整数,即给定要对其执行的操作,将其转换为浮点似乎没有意义。如果我的记忆正确,请将它转换为您提供的链接中的格式为%ld的字符串
对不起,自从我写这篇文章以来,问题已经改变了。Float没有给您足够的小数点,您需要使用double来代替这听起来像是一个格式字符串问题。您可能想要更像:
NSLog(@"Show Light:= %0.15lf", dbl);
大多数人不在乎那么多数字(%lf
格式假定您将浮点
更改为双精度
)
另一方面,我不明白你发布的代码想要实现什么。为什么要调用random()
9次?在我看来,如果你自己把这些东西填在表格里,你会得到更好的服务。您可以设置符号和指数位,然后使用52字节的random()
作为指数
编辑:我想我是想得太多了。这可能不是最佳解决方案,但我认为它适用于您的用例。请注意,对于15位随机数字,您需要50字节的随机数据,因此我们需要使用64位整数:
static uint64_t random64()
{
uint64_t randomValue;
randomValue = (random() | ((uint64_t) random() << 32));
return randomValue;
}
static double getRandomDouble15Digits()
{
double random15digits = random64() * 10e-15L;
long wholeNumber = (long) random15digits;
return (random15digits -= (double) wholeNumber);
}
static uint64\u t random64()
{
uint64_t随机值;
randomValue=(random()|)((uint64_t)random()这听起来像是一个格式字符串问题。您可能需要类似以下内容:
NSLog(@"Show Light:= %0.15lf", dbl);
大多数人不关心那么多的数字;-(%lf
格式假定您将浮点值更改为双精度值)
另一部分是,我不明白你发布的代码想要实现什么。为什么你要调用random()
9次?在我看来,你最好自己填充中的位。你可以设置符号和指数位,然后使用52字节的random()
作为指数
编辑:我认为我考虑过了。这可能不是最佳解决方案,但我认为它适用于您的用例。请注意,对于15位随机数字,您需要50字节的随机数据,因此我们需要使用64位整数:
static uint64_t random64()
{
uint64_t randomValue;
randomValue = (random() | ((uint64_t) random() << 32));
return randomValue;
}
static double getRandomDouble15Digits()
{
double random15digits = random64() * 10e-15L;
long wholeNumber = (long) random15digits;
return (random15digits -= (double) wholeNumber);
}
static uint64\u t random64()
{
uint64_t随机值;
randomValue=(random()|)((uint64_t)random()尽量说得更清楚些,并解释真正的问题我试图编辑你的问题,以便能够辨别出你在问什么。如果我更改了你问题的含义,请进一步修改。@PengOne我想要的值是0点,后面的值应该是15位左右。比如0.300000011920929,你明白吗?请尝试更详细一些清楚,并解释真正的问题我试图编辑你的问题,以便能够辨别你在问什么。如果我更改了你问题的含义,请进一步修改。@PengOne我想要一个0点后的值,应该是15位左右。比如0.300000011920929,你明白吗?根据你的回答,我使用了是double num=(random()/(double)LONG_MAX);但它没有像我预期的那样工作它给了我这样的值0.277775
(对于0.15位以内的数字),但我仍然无法得到我预期的值。请提供想法。根据你的回答,我使用了double num=(random()/(double)LONG_MAX);但是它没有像我期望的那样工作,它给了我这样的值0.277775
(对于0.15位数字),我仍然无法得到我期望的值。请提供idea.thnx。它对我有效,但在实现后我会检查,bcoz我想在[NSTimer scheduledTimerWithTimeInterval:value target:self selector:@selector(dosomething:)userInfo:nil repeats:YES];。我已经尝试过这样的NSString*tempStr=[NSString stringWithFormat:@“%.15lf”,我的双精度值];双精度=[tempStr doubleValue];但是这个临时值是0.277775
,虽然我想要这个值的格式是277774710803188
,但是这个转换不起作用。?!@Hrushikesh,%0.15lf
是你想要使用的格式字符串。thnx。它对我有效,但是在实现之后我会检查,bcoz我想要在中使用这个值[NSTimer scheduledTimerWithTimeInterval:Value target:self self selector:@selector(dosomething:)userInfo:nil repeats:YES];。我尝试过这样的NSString*tempStr=[NSString stringWithFormat:@“%.15lf”,我的双精度值];double temp=[tempStr doubleValue];但是这个临时值是0.277775
,虽然我想要这个值的格式是277774710803188
,但是这个转换不起作用。?!@Hrushikesh,%0.15lf
是您想要使用的格式字符串。