LDBL_MAX:为什么长双值打印出这么多数字?

如何解决LDBL_MAX:为什么长双值打印出这么多数字?

printf("Unit \"long double\" -> %i bytes -> range %Lf - %Lf.\n",\
                        sizeof(long double),LDBL_MIN,LDBL_MAX);

返回

单位“ long double”-> 16个字节->范围0.000000- 1189731495357231765021263853030970205169063322294624200440323733891737005522970722616410290336528882853545697807495577314427443153670288434198125573853743678673593200706973263201915918282961524365529510646791086614311790632169778838896134786560600399148753433211454911160088679845154866512852340149773037600009125479393966223151383622417838542743917838138717805889487540575168226347659235576974805113725649020884855222494791399377585026011773549180099796226026859508558883608159846900235645132346594476384939859276456284579661772930407806609229102715046085388087959327781622986827547830768080040150694942303411728957777100335714010559775242124057347007386251660110828379119623008469277200965153500208474470792443848545912886723000619085126472111951361467527633519562927597957250278002980795904193139603021470997035276467445530922022679656280991498232083329641241038509239184734786121921697210543484287048353408113042573002216421348917347174234800714880751002064390517234247656004721768096486107994943 4157034763206435586242074435044243805661360176088374781653890278095769759772868600714870282879555671414046326158326236027628963161739784842544868606099482708679680480787025118589308385465842230409088059962945945862019037660484467909260022254105307759010657606713472001258464069570302571389609837579989269545530523685607586831792231136395194688508807718721047052039575874800131431314442549439199401757531693393923668818561891299317291042529212368351599223220509980016771027840353601408292963981151228777681357060457893435354516965395612540488464471697868932116710872290880827783505182288576460622187397028516550837209923494833344352289847512327537266360662139022812647062340753520717240586650795182173034637826313533937067749019501978416904418247380631628285868577414325811653640402184027249133933209492194984224427304270198730445366203502623869578046820036014472919971230955300572061418669748528468561865148327159744812031219467516863793430961896151073300655524214851952017628585950910518394725028638 7163249416761380499631979144187025430270675849519200883791516940158174004671147787720145964446117520405945350476472180797576111172084627363927960033967047003761337450955318415007379641260504792325166135484129188421134082301547330475406707281876350361733290800595189632520707167390454777712968226520622565143991937680440029238090311243791261477625596469422198137514696707944687035800439250765945161837981185939204954403611491531078225107269148697980924094677214272701240437718740921675661363493890045123235166814608932240069799317601780533819184998193300841098599393876029260139091141452600372028487213241195542428210183120421610446740462163533690058366460659115629876474552506814500393294140413149540067760295100596225302282300363147382468105964844244132486457313743759509641616804802412935187620466813563687753281467553879887177183651289394719533506188500326760735438867336800207438784965701457609034985757124304510203873049485425670247933932280911052604153852899484920399109194612991249163328991799 8094380337879522093131466946149705939664152375949285890960489916121944989986384837022486672249148924678410206183364627416969576307632480235587975245253737035433882960862753427740016333434055083537048507374544819754722228975281083020898682633020285259923084168054539687911418297629988964576482765287504562854924265165217750799516259669229114977788962356670956627138482018191348321687995863652637620978285070099337294396784639879024914514222742527006363942327998483976739987154418554201562244154926653014515504685489258620276085761837129763358761215382565129633538141663949516556000264159186554850057052611431952919918807954522394649627635630178580896692226406235382898535867595990647008385687123810329591926494846250768992258419305480763620215089022149220528069842018350840586938493815498909445461977893029113576516775406232278298314033473276603952231603422824717528181818844304880921321933550869873395861276073670866652375555675803171490108477320096424318780070008797346032906278943553743564448851907 191616455141155761939399690767415156402826543664026760095087523945507341556135867933066031744720924446513532366647649735400851967040771103640538150073486891798364049570606189535005089840913826869535090066783324472578712196604415284924840041850932811908963634175739897166596000759487800619164094854338758520657116541072260996288150123144377944008749301944744330784388995701842710004808305012177123560622895076269042856800047718893158089358515593863176652948089031267747029662545110861548958395087796755464137944895960527975209874813839762578592105756284401759349324162148339565350189196811389091843795734703269406342890087805846940352453479398080674273236297887100867175802531561302356064878709259865288416350972529537091114317204887747405539054009425375424119317944175137064689643861517718849867010341532542385911089624710885385808688837777258648564145934262121086647588489260031762345960769508849149662444156604419552086811989770240.000000

也许这是一个愚蠢的问题,但这真的是long double可以容纳的最大值吗? (绝对的震撼力使我震惊)。也许我犯了一些愚蠢的错误,而C在向我扔出了一个垃圾值?

我正在Linux上使用64位gcc编译代码。

解决方法

长双精度有三种常见的实现方式:1.无聊的长双精度与双精度相同。 2. IEEE 754的一种,其中长双精度以15位指数和64位尾数存储。 3.一种有趣的方法,其中长双精度数与两个双精度数x + y相同,并且具有舍入(x + y)= x的属性。

在第一种和第三种情况下,长双精度通常将具有约308位数字,就像双精度一样。在第二种情况下,long double可以容纳4,900位数。

,

该数字恰好是2 16,384 −2 16,320 。 (它正确打印;我检查了所有数字。)它是IEEE-754方案中使用15位指数和64位有效数字表示的最大有限值:

  • 具有15位,指数范围为−16,382至+16,383。
  • 具有64位,有效数字的最大值(按[1,2]正常范围缩放)为2 0 +2 -1 +2 −2 +…+ 2 −63 = 2−2 −63
  • 因此最大的有限值为+(2−2 −63 )•2 16,383 = 2 16,320

这与Intel的80位浮点格式匹配。您可以通过包含<float.h>并打印FLT_RADIX(应为2),LDBL_MANT_DIG(64),LDBL_MIN_EXP(−16,381)和{{1} }(16,384)。 (C指数与IEEE-754指数相差一个,因为C在[1/2,1)正常范围内缩放有效位数。)

,

page可以帮助您找出答案

float为32位大小或4个字节 没有长浮点数,在其他语言(例如C#)中,浮点数的替代名称为Single double的大小为8个字节,long douuble为16个字节

对于打印值,您可以使用此代码

printf("%f",_float_var);
printf("%lf",_double_var);
printf("%Lf",_long_double_var);

page描述了两次存储的时间以及如何自行计算最小值和最大值以确保

一些可以长整型存储的值

2−16382 × 2−112 = 2−16494
≈ 6.4751751194380251109244389582276465525 × 10−4966
                                            (smallest positive subnormal number)
2−16382 × (1 − 2−112)
≈ 3.3621031431120935062626778173217519551 × 10−4932
                                            (largest subnormal number)
2−16382
≈ 3.3621031431120935062626778173217526026 × 10−4932
                                            (smallest positive normal number)
216383 × (2 − 2−112)
≈ 1.1897314953572317650857593266280070162 × 104932
                                            (largest normal number)
= 1 − 2−113
≈ 0.9999999999999999999999999999999999037
                                            (largest number less than one)
1 + 2−112
≈ 1.0000000000000000000000000000000001926
                                            (smallest number larger than one)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-