在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/C  C++/ 用兩種不同的順序計(jì)算n的負(fù)2次方,順序不同得到的答案也不同,但實(shí)際計(jì)算中兩種順序

用兩種不同的順序計(jì)算n的負(fù)2次方,順序不同得到的答案也不同,但實(shí)際計(jì)算中兩種順序得到的答案相同?

在數(shù)值計(jì)算方法的書中有一道題目讓計(jì)算求和n的負(fù)2次方 n的范圍是1-10000 約等于1.644834 1.644725
但我在實(shí)際計(jì)算中分別讓n從1到10000和n從10000到1,答案都是1.644834,并沒有出現(xiàn)誤差,這是怎么回事?
是代碼的問(wèn)題嗎?

clipboard.png

clipboard.png

回答
編輯回答
柒喵

1.644834 1.644725 是用float計(jì)算來(lái)出來(lái)。精度低。

你的代碼是用double算出來(lái)的,精度高。

用double計(jì)算,兩次計(jì)算的數(shù)據(jù),也會(huì)不一樣。
但你的代碼顯示一樣,是因?yàn)槟闶前磃loat的格式輸出double的數(shù)據(jù)。
如果你輸出double所有的小數(shù),結(jié)果就會(huì)不一樣。
就是這樣的數(shù)據(jù)。
1.64483407184805963
1.64483407184806518
最后向幾位不一樣。

如果用float,就是這樣的數(shù)據(jù)
1.64483404159545898
1.64472532272338867

附c++,double計(jì)算的代碼

#include <iostream>
int main()
{
double s=0;
for(int i=10000;i>0;i--)
{
double t = 1.0/(i*i);
s +=t;

}
std::cout.precision(17);
std::cout<<std::fixed<<s<<std::endl;

s = 0;
for(int i=1;i<=10000;i++)
{
double t = 1.0/(i*i);
s +=t;
}
std::cout.precision(17);
std::cout<<std::fixed<<s<<std::endl;
}

單精度浮點(diǎn)數(shù)在機(jī)內(nèi)占4個(gè)字節(jié),用32位二進(jìn)制描述。
雙精度浮點(diǎn)數(shù)在機(jī)內(nèi)占8個(gè)字節(jié),用64位二進(jìn)制描述。

2018年5月15日 01:22