一个double可以表示一个float可以代表的所有值吗?

前端之家收集整理的这篇文章主要介绍了一个double可以表示一个float可以代表的所有值吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有一些float值不能表示的int值.

但是,double可以表示float可以表示的所有值吗?

我的直觉说是的,因为double有更多的分数位更多的指数位,但可能会有一些愚蠢的陷阱,我失踪了.

解决方法

是.

这可能有助于了解浮标和双打如何工作.

没有太多的细节…

拿数字152853.5047(木星的月亮的转动时间在几秒钟内)

以科学计数,这个数字是0.1528535047×10 ^ 6

由于电脑只能理解1和0,所以有办法定义.

尾数(1528535047)和指数(6)存储在32位…如果我记得正确,只有24位用于尾数,所以浮点通常更多的是精度大于大小.数字越大,其精度就越低.

1528535047 = 1011011000110111001100000000111所以你只能存储第一个24位…最后三个1被丢弃.

因为整数是32位,你是对的,一个浮点不能准确地包含它.不太有意义的数字最终被淘汰.

绝对值小于2 ^ 24(24位)的任何整数都可以存储而不会损失精度. (16777216)

这些位是如何以浮点数存储的:

How floats are stores diagram http://phimuemue.wordpress.com/files/2009/06/576px-ieee-754-single-svg1.png

source
符号为1位,指数为8位,尾数为23位.因此,为了回答您的问题,由于只为尾数保留23位,因此无法精确显示32位整数.它将迅速开始删除数字(从右边),因为有更多的数字需要显示.

对于双倍,你只是增加它可以存储的位数…事实上,它被称为双精度,所以可以显示为浮点数的任何数字都能被显示为双精度.额外的0只是添加到尾数.

因此,由于双倍占用64位,因此从32位int转换为双精度时,大多数人将使用双精度.浮点数将有利于转换16位的空格.

猜你在找的CSS相关文章