社区
C语言
帖子详情
怎么算GCC中long double的值范围
friendmine
2005-07-06 04:34:00
我想知道怎么计算gcc中long double的值的范围.
在VC中对应的long double是一个80Bits长的浮点数.
但是在GCC中可以指定为96或128Bits,那么对应的值范围是多少呢.
高手请指点.
...全文
1070
7
打赏
收藏
怎么算GCC中long double的值范围
我想知道怎么计算gcc中long double的值的范围. 在VC中对应的long double是一个80Bits长的浮点数. 但是在GCC中可以指定为96或128Bits,那么对应的值范围是多少呢. 高手请指点.
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
friendmine
2005-07-12
打赏
举报
回复
谢谢.
newbiestar
2005-07-07
打赏
举报
回复
根据Intel的文档的描述,双精度浮点的精度是53位,去掉1位,还有52位,总共还有12位可以给符号位以及指数位使用,符号位占据1位,剩下11位给指数位使用。而范围则是从2^(-1022)到2^(1023),换算成十进制,是2.23*10^(-308)到1.79*10^(308)
而long double本来的长度是80位,有效精度64位(实际63位),15位指数位,加上1符号位,中间还要加上一个integer bit(Intel的文档里面这么描述的,具体没有深入探究……),范围是2^(-16382)到2^(16383),十进制的为3.37*10(-4932)到1.18*10^(4932)
但是再一次强调,gcc下,long double就是double,真的需要long double只能靠汇编了……
newbiestar
2005-07-07
打赏
举报
回复
按照我这个程序的输出,gcc 3.4.2也是把long double直接当作double计算的……
不过到了Intel的CPU里面还是会被扩展到80位然后计算……
如果楼主不急的话,我可以帮你查查64位到底是怎么安排的(这样就不要自己算了……)
newbiestar
2005-07-07
打赏
举报
回复
IEEE float-point居然被变成了整数……
因为某些原因,GCC的long double在IA32上面必然是64位的(至少2.9.3是这样)。IA32的FPU实现的最大的浮点数长度是80bit的,如果真的成了96bit/128bit的话,就只能靠软件模拟计算了(又回到了不带FPU的80386时代……)。但是对于long double的使用sizeof操作符得到的大小是12,这个是byte alignment的问题。
安排起来的话还是按照双精度的安排……
具体的参考我这个程序的输出算吧……
#include <stdio.h>
int main(void)
{
long double val = 0xfffffff;
int sz = sizeof(val);
int i;
for(i = 0; i < sz; i++)
{
printf("%2.2x ", *((unsigned char*)&val + i));
}
printf("\n");
}
friendmine
2005-07-07
打赏
举报
回复
这个是不对的.如果是long long 当然可以这么算,不过long double 这么算是错的.
它里边有指数位,小数位与符号位.
而且还有些没有用到的添填位.
所以这是不正确的.
firstdreamer
2005-07-06
打赏
举报
回复
pow(2,96)=79228162514264337593543950336L
pow(2,128)=340282366920938463463374607431768211456L
考虑到正负数,剩下的问题就不用说了吧:)
慢慢来还不行么
2005-07-06
打赏
举报
回复
帮顶
soft_
double
:soft_
double
提供双精度浮点数据类型的C ++软件实现
soft_
double
soft_
double
提供了64位双精度浮点数据类型的C ++软件实现。 一些编译器不支持内置的64位浮点类型,例如通常被称为
double
或
long
double
。 例如,通常用于Arduino等8位嵌入式系统或独立裸机AVR的avr-
gcc
工具链不支持64位
double
(在versoin 10之前)。 可以在此类系统上使用soft_
double
来提供64位
double
的软件仿真的可移植实现。 此C ++模板仅标头库实现了一个插入式双精度浮点类型,该类型实际上可以像常规的内置64位浮点类型
double
。 soft_
double
实现常见的代数运
算
, sqrt和比较运
算
,并且还完全支持std::numeric_limits 。 soft_
double
使用仅标头的C ++ 14编写,并且与C ++ 14、17、20兼容。注意:正在进行与C ++ 11的向
C程序语言
中
数学函数
C程序语言
中
数学函数
必须知道的495个C语言问题
一些常见的、需要注意的问题。对提高C语言编程有重要的作用!
Gcc
小端存储int,
long
,
double
,float,short
size_t i;for (i = 0;i < len;i++)return 0;
c语言
long
double
输出,printf和
long
double
我在Windows上将最新的
gcc
与Netbeans一起使用。为什么不起作用
long
double
?是printf符%lf错了吗?码:#include int main(void){float aboat = 32000.0;
double
abet = 5.32e-5;
long
double
dip = 5.32e-5;printf("%f can be written %e\n", aboat,...
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章