22 c# floating-point double rounding
难道铸造double于float总是产生相同的结果,也可以有一些"整差异"?
例如,x在
float x = (float)0.123456789d;
Run Code Online (Sandbox Code Playgroud)
总是一样的价值?
什么时候浮动加倍,然后再将其投射回浮动,即.(float)(double)someFloat?
最感兴趣的是C#中的结果,但如果您对其他语言的工作原理有所了解,请随时分享.
pho*_*oog 12
除非语言偏离IEEE规范,否则结果不应取决于语言.
所有浮点数都可以精确地表示为双精度数,因此从float到double到float的往返应该产生与您开始时相同的值.
类似地,将任何double值转换为float应始终产生相同的结果,但是,当然,有许多不同的double值会截断为相同的float值.
如果你垂头丧气一double到float,你失去的精度和数据.向上转换float为a double是一种不断扩大的转换; 如果然后往返,则不会丢失任何数据...也就是说,除非您在将其向下转换回浮点之前对该值执行某些操作.
浮点数会牺牲范围的精度和精度.单精度浮点数可提供32位精度; 双精度给你64位.但它们可以表示超出基础精度指示范围的值.
C#float和doubleIEEE 754浮点值.
float是一个单精度IEEE 754值(32位),由一个
double是双精度IEEE 754值(64位)并由a组成
尾数的有效精度比其表观大小(浮点魔法)高1位.
一些CLR浮点资源为您服务:
本文可能是关于浮点运算的危险和陷阱的规范性论文.如果您不是ACM的成员,请单击标题上的链接以查找该文章的公共下载:
摘要
浮点算法被许多人认为是一个深奥的主题.这是相当令人惊讶的,因为浮点在计算机系统中无处不在:几乎每种语言都有浮点数据类型; 从PC到超级计算机的计算机都有浮点加速器; 大多数编译器都会被要求不时编译浮点算法; 几乎每个操作系统都必须响应溢出等浮点异常.本文提供了一个关于浮点方面的教程,它对计算机系统的设计者有直接影响.它首先介绍浮点表示和舍入误差,继续讨论IEEE浮点标准,最后举例说明计算机系统构建器如何更好地支持浮点.
| 归档时间: |
|
| 查看次数: |
41094 次 |
| 最近记录: |