Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iPhone上,如何生成15位十进制的熵?_Iphone_Objective C_Random - Fatal编程技术网

在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
是您想要使用的格式字符串。