上PPC

2011-04-17 32 views
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

你的意思是它總是*產生0.0000嗎? – 2011-04-17 11:59:43

+2

要打印'0.0000',表達式'((float)rand()/ RAND_MAX)'的值必須是'-0.3333333333'。我非常懷疑這一點,即使我沒有與Montavista在PPC – pmg 2011-04-17 12:08:39

+0

@pmg上達成一致。我可以看到在PPC上gcc上是否存在一些奇怪的地方,它在float類型之前不正確地執行了rand()/ RAND_MAX分割(注意你,我無法想象它實際上是這樣做的)總會給你'1.0000',而不是'0.0000'。 – QuantumMechanic 2011-04-17 16:16:31

回答

0

一個預感是,你應該使用雙而不是浮動或印刷(double)u,因爲%f需要一倍。當我傳遞給可變參數函數時,浮動被自動提升爲兩倍,我的印象是這樣的。

您也可以嘗試打印(int)(u*10000)

+0

事實上,當傳遞給可變參數函數時,浮點數會提升爲double。 – 2011-09-24 19:48:27