0
上Montavista公司浮點數生成用C
我有以下簡單的程序,以生成浮點1和4之間的隨機數:上PPC
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
int i = 0;
float u;
srand((unsigned)time(NULL));
for(i = 0;i< 10000 ; i++)
{
u = ((4-1)*((float)rand()/RAND_MAX))+1;
printf("The random value for iteration = %d is %2.4f \n", i, u);
}
}
它成功地產生上的浮置1和4之間的中點的隨機數x86 Red Hat Linux機器。但同樣的程序在運行Montavista Linux的PPC上產生0.0000隨機數。
有人可以解釋爲什麼以及如何使這項工作在PPC Montavista上?
你的意思是它總是*產生0.0000嗎? – 2011-04-17 11:59:43
要打印'0.0000',表達式'((float)rand()/ RAND_MAX)'的值必須是'-0.3333333333'。我非常懷疑這一點,即使我沒有與Montavista在PPC – pmg 2011-04-17 12:08:39
@pmg上達成一致。我可以看到在PPC上gcc上是否存在一些奇怪的地方,它在float類型之前不正確地執行了rand()/ RAND_MAX分割(注意你,我無法想象它實際上是這樣做的)總會給你'1.0000',而不是'0.0000'。 – QuantumMechanic 2011-04-17 16:16:31