当前位置: 首页 > news >正文

茂港手机网站建设公司网站后台密码修改

茂港手机网站建设公司,网站后台密码修改,网站的设计开发,wordpress 按钮美化我最近做了一道题#xff0c;一个64位(unsigned __int64)范围内的数输出其除以1000的值#xff0c;并按四舍五入保留小数点后三位。我刚开始直接写WA#xff0c;结果发现当数比较大的时候#xff0c;结果后几位精度总会丢失#xff0c;只好手动模拟了一个#xff0c;水过…我最近做了一道题一个64位(unsigned __int64)范围内的数输出其除以1000的值并按四舍五入保留小数点后三位。我刚开始直接写WA结果发现当数比较大的时候结果后几位精度总会丢失只好手动模拟了一个水过。。。。后来我在网上找到了某位大牛的博客这篇文章让我对数据类型有了更好的认识。。谢谢转载自http://blog.csdn.net/cai870808/article/details/24907853看了一篇关于C/C浮点数的博文在Win32下把int, 指针地址,long等4字节整数赋给一个double后再用该double数赋给原始类型的数得到的结果于最初的数值一致即不存在任何精度丢失。例如下面的结果将总是true:long a123456; //assign any long number heredouble dba;long bdb;printf(%s\n,ab?true:false);但是对于long long或win64下的指针地址等8字节整数将存在精度丢失于是对这方面做了一个简单的测试#include#includevoid showEncodeOfDouble(unsigned char*db){const int ByteLength8;for(int iByteLength-1;i0;i--)printf(%.2x,db[i]);printf(\n);}intmain(){unsignedlong long maxULL0xffffffffffffffff; //2^64-118446744073709551615,//max unsigned long longprintf(%llu\n,maxULL);double d1maxULL; //20bit Significant,Precision Lossprintf(%f\n,d1);maxULLd1;printf(%llu\n,maxULL);showEncodeOfDouble((unsignedchar*)d1);system(pause);return 0;}输出的结果如下(visual studio,win32)1844674407370955161518446744073709552000.000000922337203685477580843 f0 00 00 00 00 00 00至此有两点疑问(暂时不理会代码中showEncodeOfDouble的结果)1)为什么丢失精度后得到的double数是18446744073709552000.0000002)为什么将double数重新转化为unsigned long long后得到的数又和double不一致呢对于这两个问题需要对C浮点数的规格有一定的了解。1  IEEE浮点标准C/C采用的是IEEE浮点标准它以“二进制的科学表示法”表示一个小数其中M是一个整数部分仅有一位的二进制小数例如1.011表示十进制下的1.375。E表示该小数以2为底时的阶数。基于以上的表示方式小数需要对三部分进行编码表示符号的s及阶码E、尾数码M。C中的double类型三种编码所占的位数如图所示。 53位尾数码所能达到的精度为53二进制位约为16 个十进制位( 53 log10(2) ≈ 15.955)[1]尾数码的编码中还有一个隐含的开头整数位1(或0当11位阶码全0时)因此实际中可得15-17位十进制的精度。当有效位数最多15位的十进制数转换成double然后重新转换为原来的十进制类型时数值保持一致另一方面将一个double数转化为可以容纳17位以上有效数字的十进制数再重新转化为double结果数值也保持一致。这就解释了为什么4字节的整数转化为double重新转化能保持一致(2^324294967296仅10个有效位)而8字节的整数却可能丢失精度(2^64-118446744073709551615共20个有效位)。但第一个问题中整数丢失精度后转化成的double数值是怎么来的呢这需要了解C阶码和尾数对于double数值的意义。2 阶码编码和尾数编码在阶码编码中有一个常数偏置量Bias1023假设11位阶码所代表的无符号整数值为e1)若e不为0(11位全为1时用于表示特殊数字此处不讨论)则double数值为2)若e0则小数值为那么可以看函数showEncodeOfDouble了它的作用是将一个double数的编码按字节打印出来(左边是高字节)按其打印结果按照上面计算可知double编码值表示的数值是2^64这是合理的当把精度较高的整数转化为double时C采用向偶数舍入的方式得到最接近的值[2]。至于打印出的结果属于C浮点数打印中的细节问题。3 C浮点数打印许多C/C的库中在输出double时通常有意使得输出结果简短些(即使设置了足够多的可见位数)以避免较大位数的输出。直接使用C中的printf或cout打印double数时打印显示的结果也有可能是带有精度丢失的结果可使用16进制的方式打印出更精确的doubleprintf(%a\n,d1);得到的输出结果为0x1.000000p64至此问题1实际上只是C中将高精度整数转double时的偶数舍入问题。对于问题2从float或double转换成int,值将会被向零舍入.例如1.999将被转换成1而-1.999将会被转换成-1。进一步来说值有可能会溢出。C语言标准没有对这种情况指出固定的结果这种转换行为是无定义的。[2]深入理解计算机系统Randal E. Bryant, 机械工业出版社
http://www.yutouwan.com/news/276508/

相关文章:

  • 建网站免费空间乾县做网站
  • 可以免费做调查问卷的网站禁止域名访问网站
  • 网站建设报价单表格模板用自己电脑做服务器建网站
  • 重庆工业建设网站安徽网站开发项目
  • 网站开发硬件配置织梦cms网站更新
  • 网站目录 index.html大连建设工程信息网华宇凤凰城东侧市政管网配套工程
  • 手机网站开发合同西安云众网站建设
  • 如何宣传自己的网站登陆wordpress忘记密码
  • 好的网站标准科技部 咖啡
  • 灵山县建设局网站店铺运营计划方案
  • 云服务器怎么架设网站html5的网站有哪些
  • 网站建设搜索信息系统开发计划
  • 广东住房和城乡建设厅网站造价为自家企业做网站
  • 视频网站 怎么做企业网站的建设有哪些经典问题
  • 网站建设与管理 课件网页编辑布局在线
  • 网站业务员怎么给客户做方案我做的网站怎么是危险网站
  • 阿里云虚拟主机网站网站建设维护培训
  • 东城企业网站建设flash打开网站源码
  • dede宠物网站模板常州网站建设基本流程
  • 学校网站建设方案论文信阳网站设计
  • 青岛城阳 软件网站开发网站托管做的好的公司
  • 优秀网站设计欣赏学校网站用途
  • 仲恺住房和城乡建设局网站网站开发与管理对应的职业及岗位
  • 360如何做免费的网站建设网站备案不通过怎么办
  • 颍上网站建设wordpress归档页面自定义
  • 镇江润州区建设局网站设计一个app的流程
  • 怎么在网站做推广不要钱基于lnmp做wordpress
  • 网站规划与建设ppt2022年注册公司流程
  • 厦门网站开发网站建设网站免费购物平台都有哪些
  • php初学者网站网站换域名只做首页301