C++中float,double到底保留几位有效数字 C中的float和double的有效数字和精度各是多少?

c++\u4e2d\uff0cfloat\u578b\u548cdouble\u578b\u5404\u4fdd\u7559\u51e0\u4f4d\u6709\u6548\u6570\u5b57\uff1f\u9ebb\u70e6\u4e3e\u51e0\u4e2a\u4f8b\u5b50\uff0c\u8c22\u8c22\uff5e

float\u7cbe\u5ea6\u662f2^23\uff0c\u80fd\u4fdd\u8bc16\u4f4d\u3002
double\u7cbe\u5ea6\u662f2^52\uff0c\u80fd\u4fdd\u8bc115\u4f4d\u3002
\u4f46\u662f\u9ed8\u8ba4float\u548cdouble\u90fd\u53ea\u80fd\u663e\u793a6\u4f4d\uff0c\u518d\u591a\u9700\u8981#include \uff0c\u7136\u540e\u5728\u8f93\u51fa\u8bed\u53e5\u4e4b\u524d\u63d2\u5165cout << setprecision(20);\u5f3a\u5236\u8f93\u51fa\u5c0f\u6570\u4f4d\u3002

float fval = 1.32121212f;
double dval = -45.67456554;
double dval2 = -4.456511111111111;
cout << fval << endl;
cout << dval << endl;
cout << dval2 << endl;
\u8f93\u51fa\u7684\u7ed3\u679c\u662f\uff1a
1.32121
-45.6746
-4.45651
\u53c2\u8003\u8d44\u6599\uff1a

float\u6709\u6548\u6570\u5b57\u4f4d\u4e3a6 \u2013 7\u4f4d\uff0c\u5b57\u8282\u6570\u4e3a4\uff0c\u6307\u6570\u957f\u5ea6\u4e3a8\u4f4d\uff0c\u5c0f\u6570\u957f\u5ea6\u4e3a23\u4f4d\u3002\u53d6\u503c\u8303\u56f4\u4e3a 3.4E-38\uff5e3.4E+38\u3002
double\u6709\u6548\u6570\u5b57\u4f4d\u4e3a15 \u2013 16\u4f4d\uff0c\u5b57\u8282\u6570\u4e3a8\uff0c\u6307\u6570\u957f\u5ea6\u4e3a11\u4f4d\uff0c\u5c0f\u6570\u957f\u5ea6\u4e3a52\u4f4d\u3002\u53d6\u503c\u8303\u56f4\u4e3a1.7E-308\uff5e1.7E+308\u3002

\u6269\u5c55\u8d44\u6599
\u53ef\u6839\u636e\u5e94\u7528\u7a0b\u5e8f\u7684\u9700\u6c42\u5c06\u53d8\u91cf\u58f0\u660e\u4e3a float \u6216 double\u3002\u8fd9\u4e24\u79cd\u7c7b\u578b\u4e4b\u95f4\u7684\u4e3b\u8981\u5dee\u5f02\u5728\u4e8e\u5b83\u4eec\u53ef\u8868\u793a\u7684\u57fa\u6570\u3001\u5b83\u4eec\u9700\u8981\u7684\u5b58\u50a8\u4ee5\u53ca\u5b83\u4eec\u7684\u8303\u56f4\u3002\u5982\u679c\u5b58\u50a8\u6bd4\u7cbe\u5ea6\u66f4\u91cd\u8981\uff0c\u5bf9\u6d6e\u70b9\u53d8\u91cf\u4f7f\u7528 float \u7c7b\u578b\u3002\u76f8\u53cd\uff0c\u5982\u679c\u7cbe\u5ea6\u662f\u6700\u91cd\u8981\u7684\u6761\u4ef6\uff0c\u5219\u4f7f\u7528 double \u7c7b\u578b\u3002
\u6d6e\u70b9\u53d8\u91cf\u53ef\u4ee5\u63d0\u5347\u4e3a\u66f4\u5927\u57fa\u6570\u7684\u7c7b\u578b\uff08\u4ece float \u7c7b\u578b\u5230 double \u7c7b\u578b\uff09\u3002\u5f53\u60a8\u5bf9\u6d6e\u70b9\u53d8\u91cf\u6267\u884c\u7b97\u672f\u65f6\uff0c\u901a\u5e38\u4f1a\u51fa\u73b0\u63d0\u5347\u3002\u6b64\u7b97\u672f\u59cb\u7ec8\u4ee5\u4e0e\u5177\u6709\u6700\u9ad8\u7cbe\u5ea6\u7684\u53d8\u91cf\u4e00\u6837\u9ad8\u7684\u7cbe\u5ea6\u6267\u884c\u3002
\u53c2\u8003\u8d44\u6599\u6765\u6e90\uff1a\u767e\u5ea6\u767e\u79d1\u2014\u2014\u6d6e\u70b9\u578b\u6570\u636e

float精度是2^23,能保证6位。double精度是2^52,能保证15位。但是默认float和double都只能显示6位,再多需要#include <iomanip>,然后在输出语句之前插入cout << setprecision(20);强制输出小数位。

拓展资料

float与double的范围和精度

1、范围

float和double的范围是由指数的位数来决定的。

float的指数位有8位,而double的指数位有11位,分布如下:
float:1bit(符号位) 8bits(指数位) 23bits(尾数位)
double:1bit(符号位) 11bits(指数位) 52bits(尾数位)

于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。

float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。

2、精度

float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。

float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。



float精度是2^23,能保证6位。
double精度是2^52,能保证15位。
但是默认float和double都只能显示6位,再多需要#include ,然后在输出语句之前插入cout << setprecision(20);强制输出小数位。

float fval = 1.32121212f;
double dval = -45.67456554;
double dval2 = -4.456511111111111;
cout << fval << endl;
cout << dval << endl;
cout << dval2 << endl;
输出的结果是:
1.32121
-45.6746
-4.45651

扩展资料

结论:





float精度是2^23,能保证6位。
double精度是2^52,能保证15位。
但是默认float和double都只能显示6位。

扩展资料

C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。 

C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。



int ival = 3;
float fval = 1.32121212f;
double dval = -45.67456554;
double dval2 = -4.456511111111111;
cout << ival << endl;
cout << fval << endl;
cout << dval << endl;
cout << dval2 << endl;

输出的结果是:
3
1.32121
-45.6746
-4.45651

【拓展资料】

C语言中float和double的区别

float为单精度,占4字节(32位)的内存空间,它的数值有效范围是-10的38次方到10的38次方,只表示7位有效数字。而double为双精度,8字节,正负10的308次方之间,能精确到16位。这应该就是他们的的最基本的区别吧。



float精度是2^23,能保证6位。
double精度是2^52,能保证15位。
double精度的确有那么高,但是默认打印位数没有那么多。
先#include <iomanip>,然后在输出语句之前插入cout << setprecision(20);强行要求输出20位精度,就可以比较出float和double的精度差别了。

  • c璇█double鍜float鍖哄埆
    绛旓細c璇█double鍜float鍖哄埆鏈夌簿搴︿笉涓鏍凤紝float鏄崟绮惧害锛宒ouble鏄弻绮惧害锛岃〃绀哄皬鏁扮殑鑼冨洿涓嶄竴鏍凤紝double鑳借〃绀虹殑鑼冨洿姣攆loat澶э紝double鍦ㄥ唴瀛涓锛屽崰8涓瓧鑺傦紝float鍦ㄥ唴瀛樹腑锛屽崰4涓瓧鑺傘俧榛樿淇濈暀6浣嶅皬鏁帮紝涓嶈冻浣嶄互0琛ラ綈锛岃秴杩囧叚浣嶆寜鍥涜垗浜斿叆鐨勬柟娉曚繚鐣6浣嶏紝鑻ユ兂杈撳嚭鎸囧畾浣嶆暟锛屽湪鏍煎紡鍖栬緭鍑鸿鍙ヤ腑琛ㄧず鍙橀噺...
  • float鍦C璇█涓槸浠涔堟剰鎬?鍏蜂綋鐨勩double鍛?璋㈣阿!
    绛旓細float鍦C璇█涓槸 鍗曠簿搴︽诞鐐规暟锛 double 鏄弻绮惧害娴偣鏁般傚畠浠簿搴︿笉鍚岋紝鑳借〃绀虹殑鏁板艰寖鍥村ぇ灏忎笉鍚屻傚崟绮惧害娴偣鏁帮紝4瀛楄妭锛 瀛楅暱32浣嶏紝鏈変竴浣嶇鍙蜂綅锛屾寚鏁颁綅鍏8浣嶏紝灏炬暟鍏23浣嶃 鎸囨暟鑳藉琛ㄧず鐨勬寚鏁拌寖鍥翠负-128~127銆俧loat鐨勭簿搴︿负6~7浣嶆湁鏁堟暟瀛椼 float鐨勮寖鍥翠负-2^128 ~ +2^128锛屼篃鍗-3...
  • double鍜float鐨鍖哄埆
    绛旓細double鍜float鐨鍖哄埆涓昏鏈夊瓧鑺傛暟涓嶅悓銆佹湁鏁堟暟瀛椾綅鏁颁笉鍚屻佹暟鍊煎彇鍊艰寖鍥淬佽〃杈惧紡鎸囨暟浣嶄笉鍚岀瓑銆俧loat锛氬崟绮惧害娴偣鏁 double锛氬弻绮惧害娴偣鏁 1銆佸瓧鑺傛暟涓嶅悓 鍗曠簿搴︽诞鐐规暟鍦ㄦ満鍐呭瓨鍗4涓瓧鑺傦紝鍙岀簿搴︽诞鐐规暟鍦ㄦ満鍐呭瓨鍗8涓瓧鑺傘2銆佹湁鏁堟暟瀛椾綅鏁颁笉鍚 鍗曠簿搴︽诞鐐规暟鏈夋晥鏁板瓧8浣嶏紝鍙岀簿搴︽诞鐐规暟鏈夋晥鏁板瓧16浣嶃3銆...
  • C璇█涓璬ouble鍜float鐨勬牸寮忔槸浠涔堟牱鐨?
    绛旓細1.鍙岀簿搴︽诞鐐瑰瀷鏁版嵁鐢%lf杈撳嚭銆傚洜涓double鏄8涓瓧鑺鐨勶紝float鏄4涓瓧鑺傜殑锛%f 鐨勬牸寮忓氨鏄4涓瓧鑺傜殑锛岃 %lf 灏辨槸8涓瓧鑺傜殑銆 渚嬪锛歱rintf("%lf\n",x);2.short 鍗犵敤鍐呭瓨绌洪棿2涓瓧鑺傦紝鐭暣鍨嬫暟鎹敤%d杈撳嚭 渚嬪锛歱rintf("%d\n",a);渚嬶細include <stdio.h> int main(){double x;short...
  • c璇█float鍜double鐨勫尯鍒槸浠涔?
    绛旓細f鎸float鍨嬶紝c涓鐨勫疄鏁伴粯璁や负double锛岄櫎闈炲悗闈㈣窡鐫f鐨勬墠鎸噁loat銆傝嫢鎶婂畠璧嬬粰涓涓猣loat鍨嬪彉閲忓垯浼氭湁绮惧害鎹熷け鐨勭紪璇戣鍛婃彁绀猴紝0.5f鐨勬剰鎬濇槸鍛婅瘔缂栬瘧鍣ㄥ皢杩欎釜0.5鎸塮loat鍨嬪鐞嗐傝繖閲岀殑0.5f鍜0.5F娌℃湁鍖哄埆銆備緥濡0xa5銆0Xa5銆0xA5銆0XA5瀹屽叏鐩稿悓銆
  • c璇█涓璬ouble鍜float鐨勭敤娉
    绛旓細鐢ㄦ硶濡備笅锛double鏄C璇█涓竴绉嶅父鐢ㄧ殑鍙岀簿搴(doubleprecision)娴偣鏁版牸寮忋傚叾瀛樺偍绌洪棿鍗犵敤8bit锛岃兘澶熻〃绀哄嚭姣斿疄鏁版垨鍗曠簿搴(singleprecision)鏇村姞绮剧‘鐨灏忔暟浣嶆暟锛屽崄杩涘埗灏忔暟绮惧害杈惧埌15~17浣嶏紝鍗佸叚杩涘埗灏忔暟绮惧害杈惧埌30~34浣嶏紝鍏惰绠楃簿搴︽帴杩戜簬鏈哄櫒鐨勫崄鍊嶏紝璁$畻2鐨勬鏂规椂涔熸棤闇婧㈠嚭锛岄傜敤浜庡瓨鍌ㄥ疄闄呮暟鎹椂瑕佹眰杈...
  • c璇█涓璬ouble鍜float鎬庝箞鐢
    绛旓細1銆佸弻绮惧害娴偣鍨嬫暟鎹敤%lf杈撳嚭銆傚洜涓double鏄8涓瓧鑺鐨勶紝float鏄4涓瓧鑺傜殑锛%f 鐨勬牸寮忓氨鏄4涓瓧鑺傜殑锛岃 %lf 灏辨槸8涓瓧鑺傜殑銆 渚嬪锛歱rintf("%lf\n",x);2銆乻hort 鍗犵敤鍐呭瓨绌洪棿2涓瓧鑺傦紝鐭暣鍨嬫暟鎹敤%d杈撳嚭 渚嬪锛歱rintf("%d\n",a);渚嬪锛歩nclude <stdio.h> int main(){double x;sh...
  • C璇█涓崟绮惧害娴偣鏁板拰鍙岀簿搴﹀垎鍒浣曡〃绀?鏈変粈涔堝樊鍒?
    绛旓細C璇█涓紝鍗曠簿搴︽诞鐐瑰瀷涓float锛 鍙岀簿搴︽诞鐐瑰瀷涓double銆傚叿浣撳尯鍒涓嬶細1銆 鍗犵敤瀛楄妭绌洪棿涓嶅悓銆備竴涓猣loat鍙橀噺鍗犵敤鍥涘瓧鑺傦紝涓涓猟ouble绫诲瀷鍙橀噺锛屼竴鑸崰鐢8瀛楄妭銆2銆 琛ㄧず鑼冨洿涓嶅悓銆俧loat琛ㄧず鑼冨洿涓-3.4E-38锝3.4E+38銆俤ouble 琛ㄧず鑼冨洿涓-1.7E-308锝1.7E+308銆3銆 绮惧害涓嶅悓銆俧loat鍦ㄨ〃绀哄崄杩涘埗鏃...
  • C璇█float鍜double鏈変粈涔堝尯鍒
    绛旓細1.鍏抽敭瀛楋細鍦C璇█涓紝float鏄竴涓叧閿瓧锛岃〃绀哄崟绮惧害娴偣鏁般傝屽湪C++涓紝float涔熸槸涓涓叧閿瓧锛屼絾瀹冨彲浠ヨ〃绀哄崟绮惧害鎴栧弻绮惧害娴偣鏁帮紝鍏蜂綋鍙栧喅浜庣紪璇戝櫒鐨勫疄鐜般侰++涓病鏈夊畾涔塺eal杩欎釜鍏抽敭瀛椼2.瀛樺偍绌洪棿锛氬湪C璇█涓紝float閫氬父鍗犵敤4涓瓧鑺傦紝鑰double鍒欏崰鐢8涓瓧鑺傘傚湪C++涓紝float閫氬父鍗犵敤4涓瓧鑺傦紝鑰...
  • c璇█涓鐨刦loat鍜double绫诲瀷鐨勫尯鍒槸浠涔?鍗曠簿搴﹀拰鍙岀簿搴︽槸浠涔?_鐧惧害...
    绛旓細c璇█涓 鍗曠簿搴﹀瀷鍜屽弻绮惧害鍨 鎸囦袱绉 绫诲瀷 鐨 娴偣鏁般傚崟绮惧害鍨 鍗 float 鍨, 鏈夋晥鏁板瓧绾10杩涘埗7浣 鍙岀簿搴﹀瀷 鍗 double 鍨, 鏈夋晥鏁板瓧绾10杩涘埗15浣 鎵浠ヨ兘鎻忚堪鐨勬暟鍊肩簿搴︿笉鍚屻俢璇█ 鏁版嵁 鐢 IEEE 754 鍥介檯鏍囧噯銆俧loat 鍨 鐢 4 瀛楄妭瀛樻斁锛宒ouble 鍨 鐢 8 瀛楄妭瀛樻斁銆係ingle Precision 2...
  • 扩展阅读:warning c4305 ... c++double ... float int double ... 4.2是float还是double ... 0.3是float还是double ... cpu实时悬浮窗监控 ... c++float转string ... 怎么判断double和float ... float转换为double过程 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网