1. 程式人生 > >pow log 與 (int)

pow log 與 (int)

問題 ima 精度 技術 oat \n bubuko 1.9 進行

1.不能用%d輸出double類型的數

 1     double a1=5.3;
 2     double a2=1234.1234;
 3     double a3=3412341.12341234;
 4 
 5     double b1=1.5;
 6     double b2=123.5;
 7     double b3=23412.5;
 8 
 9     double c1=10.7;
10     double c2=2.9;
11     double c3=3241324.56251;
12     printf("%d\n",a1);
13     printf("
%d\n",a2); 14 printf("%d\n",a3); 15 16 printf("%d\n",b1); 17 printf("%d\n",b2); 18 printf("%d\n",b3); 19 20 printf("%d\n",c1); 21 printf("%d\n",c2); 22 printf("%d\n",c3);

輸出的值不會變

技術分享圖片

2.

float pow(float x, float y)

x,y可以為整形,因為進行時會自動轉換類型,

但是用%d輸出double類型的數則不行。

可以使用(int)。

 1     cout<<pow(10,0)<<endl;
 2     cout<<pow(10,1)<<endl;
 3     cout<<pow(10,2)<<endl;
 4 
 5     printf("\n");
 6 
 7     printf("%f\n",pow(10,0));
 8     printf("%f\n",pow(10,1));
 9     printf("%f\n",pow(10,2));
10 
11     printf("\n");
12 
13     printf("%d\n",pow(10
,0)); 14 printf("%d\n",pow(10,1)); 15 printf("%d\n",pow(10,2)); 16 17 printf("\n"); 18 19 printf("%d\n",(int)pow(10,0)); 20 printf("%d\n",(int)pow(10,1)); 21 printf("%d\n",(int)pow(10,2));

技術分享圖片

3.

float log(float x)

(int)使用在在(int)右邊的第一個整數。

所以不能使用(int)log(s)/log(2),而是(int)(log(s)/log(2))。

而求log(2^k)/log(2)時,出現問題,因為是精度不準的問題,如結果為1.99..9xxx。

可以采用log(2^k+minv)/log(2)解決,minv=1e-12(或其它)。

 1     printf("%.15f\n",log(2)/log(2));
 2     printf("%.15f\n",log(4)/log(2));
 3     printf("%.15f\n",log(8)/log(2));
 4     printf("%.15f\n",log(16)/log(2));
 5     printf("%.15f\n",log(32)/log(2));
 6 
 7     printf("\n");
 8 
 9     printf("%f\n",(int)log(2)/log(2));
10     printf("%f\n",(int)log(4)/log(2));
11     printf("%f\n",(int)log(8)/log(2));
12     printf("%f\n",(int)log(16)/log(2));
13     printf("%f\n",(int)log(32)/log(2));
14 
15     printf("\n");
16 
17     printf("%d\n",(int)(log(2)/log(2)));
18     printf("%d\n",(int)(log(4)/log(2)));
19     printf("%d\n",(int)(log(8)/log(2)));
20     printf("%d\n",(int)(log(16)/log(2)));
21     printf("%d\n",(int)(log(32)/log(2)));
22     printf("%d\n",(int)(log(64)/log(2)));
23     printf("%d\n",(int)(log(128)/log(2)));
24 
25     printf("\n");
26 
27     printf("%d\n",(int)(log(2+minv)/log(2)));
28     printf("%d\n",(int)(log(4+minv)/log(2)));
29     printf("%d\n",(int)(log(8+minv)/log(2)));
30     printf("%d\n",(int)(log(16+minv)/log(2)));
31     printf("%d\n",(int)(log(32+minv)/log(2)));
32     printf("%d\n",(int)(log(64+minv)/log(2)));
33     printf("%d\n",(int)(log(128+minv)/log(2)));

技術分享圖片

pow log 與 (int)