float和double取值范围和精度问题

本文详细介绍了Java中的八种基本数据类型,包括整型、浮点型、逻辑型和字符型的分类,每种类型所占的字节数,以及整型、浮点型的取值范围和精度问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.八种数据类型的分类如下:
 第一类:整型 byte short int long

第二类:浮点型 float double

第三类:逻辑型 boolean(它只有两个值可取true false)

第四类:字符型 char

2.各种基本数据类型所占的字节:
boolean 布尔型                 1/8 
byte 字节类型                    1
char 字符型                       2  一个字符能存储一个中文汉字
short 短整型                     2
int 整数类型                      4
float 浮点类型(单精度)  4
long 长整形                      8
double 双精度类型(双精度)  8


3.整型各基本数据类型的取值范围:
因为1byte = 8Byte ,(例如将3byte转化为二进制为:0000 0011 ,切记第一位为符号位,即0代表+,1代表-,剩下的七位是数据位)

所以byte取值范围是:-2^7~2^7-1,即:-128~127(因为0也包括在内,所以在正数范围是2^7-1)

同理short取值范围:-2^15~2^15-1

int取值范围:-2^31~2^31-1

long取值范围:-2^63~2^63-1

4.float和double取值范围和精度问题:
float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位,分布如下:

float:
1bit(符号位)

8bits(指数位)

23bits(尾数位)

double:

1bit(符号位)

11bits(指数位)

52bits(尾数位)

范围问题:
float的指数范围为-2^7~2^7-1(即-128~127),而double的指数范围为-2^10~2^10-1(即-1024~1023),并且指数位是补码的形式来划分的。其

中负指数决定了浮点数所能表达的绝对值最小的数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。

float的范围为-2^128 ~ +2^127

double的范围为-2^1024 ~ +2^1023

精度问题:

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

,故不能对精度造成影响

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

double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

--------------------- 
作者:兮川 
来源:优快云 
原文:https://blog.youkuaiyun.com/zc_ad/article/details/53404087 
版权声明:本文为博主原创文章,转载请附上博文链接!

### 浮点数类型的取值范围比较 在多种编程语言中,`double` `float` 是两种常用的浮点数类型。这些数据类型用于表示带有小数部分的数值。 #### C/C++ 对于C/C++而言,依据IEEE 754标准: - **Float**: 占用32位(4字节),其有效数字大约为6到9位十进制数字。具体来说,`float` 类型可以表示的最大正有限数约为 \(3.4 \times 10^{38}\),最小正常化正数接近于\(1.4 \times 10^{-45}\)[^1]。 - **Double**: 使用64位(8字节)存储空间,能够提供更高的精度以及更宽泛的取值区间。最大正值可达约\(1.8 \times 10^{308}\),而最小正常化的正值则低至大约\(4.9 \times 10^{-324}\)。 ```cpp #include <iostream> #include <limits> int main() { std::cout << "Float min: " << std::numeric_limits<float>::min() << "\n"; std::cout << "Float max: " << std::numeric_limits<float>::max() << "\n\n"; std::cout << "Double min: " << std::numeric_limits<double>::min() << "\n"; std::cout << "Double max: " << std::numeric_limits<double>::max(); } ``` #### Java Java同样遵循类似的定义方式来处理单精度(`float`)精度(`double`)浮点数: - 对于`float`类型,在Java里能表达的有效范围是从\(1.4 \times 10^{-45}\) 到 \(3.4 \times 10^{38}\), 同样具有大概7位有效数字。 - 而`double`提供了更大的动态范围——从\(4.9 \times 10^{-324}\) 至 \(1.8 \times 10^{308}\),并支持至少15位有效数字。 ```java public class Main { public static void main(String[] args) { System.out.println("Float min: " + Float.MIN_VALUE); System.out.println("Float max: " + Float.MAX_VALUE); System.out.println("\nDouble min: " + Double.MIN_VALUE); System.out.println("Double max: " + Double.MAX_VALUE); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值