社区
C语言
帖子详情
为什么输出不同?
fthislife
2009-12-26 10:24:58
下边的程序什么输出的是9.000000 0.000000而不是9.000000 9.000000?
为什么会有差别?是什么原因引起的?
#include<stdio.h>
void main()
{
int c=9;
float a,*p;
a=(float)c;
p=(float*)(&c);
printf("%f %f\n",a,*p);
}
...全文
182
17
打赏
收藏
为什么输出不同?
下边的程序什么输出的是9.000000 0.000000而不是9.000000 9.000000? 为什么会有差别?是什么原因引起的? #include void main() { int c=9; float a,*p; a=(float)c; p=(float*)(&c); printf("%f %f\n",a,*p); }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wj198895
2009-12-26
打赏
举报
回复
p=(float*)(&c);
地址是一个整型的值
不能将其转化成其它类型
selooloo
2009-12-26
打赏
举报
回复
[Quote=引用 15 楼 fthislife 的回复:]
指数位为什么是-127?
怎样算出来的?
[/Quote]
去查下float存储,或者看看5L,float类型指数的起始数为127(二进制0111 1111)
十进制换成2进制,指数位要加127,反过来,二进制换成10进制指数为减127
这里的指数位是0,0-127,指数位就是-127了
hujiao199
2009-12-26
打赏
举报
回复
[Quote=引用 2 楼 hlyces 的回复:]
引用楼主 fthislife 的回复:
下边的程序什么输出的是9.000000 0.000000而不是9.000000 9.000000?
为什么会有差别?是什么原因引起的?
#include <stdio.h>
void main()
{
int c=9;
float a,*p;
a=(float)c;
p=(float*)(&c);
printf("%f %f\n",a,*p);
}
===========================
你自己不是知道了么。p=(float *)(&(float)c)
[/Quote]
p=(float *)(&(float)c)
这么写错误的。
flyyyri
2009-12-26
打赏
举报
回复
存取的差异
fthislife
2009-12-26
打赏
举报
回复
[Quote=引用 5 楼 wuyu637 的回复:]
C/C++的浮点数据类型有float和double两种。
类型float大小为4字节,即32位,内存中的存储方式如下:
符号位(1 bit)
指数(8 bit)
尾数(23 bit)
类型double大小为8字节,即64位,内存布局如下:
符号位(1 bit)
指数(11 bit)
尾数(52 bit)
符号位决定浮点数的正负,0正1负。
指数和尾数均从浮点数的二进制科学计数形式中获取。
如,十进制浮点数2.5的二进制形式为10.1,转换为科学计数法形式为(1.01)*(10^1),由此可知指数为1,尾数(即科学计数法的小数部分)为01。
根据浮点数的存储标准(IEEE制定),float类型指数的起始数为127(二进制0111 1111),double类型指数的起始数为1023(二进制011 1111 1111),在此基础上加指数,得到的就是内存中指数的表示形式。尾数则直接填入,如果空间多余则以0补齐,如果空间不够则0舍1入。所以float和double类型分别表示的2.5如下(二进制):
符号位
指数
尾数
0
1000 0000
010 0000 0000 0000 0000 0000
0
100 0000 0000
0100 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000
浮点数2.5可以用二进制小数准确表示(2.5=1*(2^1)+0*(2^0)+1*(2^-1)),但很多小数不可以准确表示
文章出处:DIY部落(http://www.diybl.com/course/3_program/c++/cppsl/2008629/129103.html)
[/Quote]
谢谢楼上的讲解,我也知道浮点型在内存的储存方式,但是不知道
a=(float)c; 这句的转换过程是怎样的?
p=(float*)(&c); 还有这句,是不是系统读取指针所指的内容,是安照指针的类型读取而不是安照指针所指的类型读取,是吗?
z569362161
2009-12-26
打赏
举报
回复
整数和浮点数存储的差异.
wuyu637
2009-12-26
打赏
举报
回复
C/C++的浮点数据类型有float和double两种。
类型float大小为4字节,即32位,内存中的存储方式如下:
符号位(1 bit)
指数(8 bit)
尾数(23 bit)
类型double大小为8字节,即64位,内存布局如下:
符号位(1 bit)
指数(11 bit)
尾数(52 bit)
符号位决定浮点数的正负,0正1负。
指数和尾数均从浮点数的二进制科学计数形式中获取。
如,十进制浮点数2.5的二进制形式为10.1,转换为科学计数法形式为(1.01)*(10^1),由此可知指数为1,尾数(即科学计数法的小数部分)为01。
根据浮点数的存储标准(IEEE制定),float类型指数的起始数为127(二进制0111 1111),double类型指数的起始数为1023(二进制011 1111 1111),在此基础上加指数,得到的就是内存中指数的表示形式。尾数则直接填入,如果空间多余则以0补齐,如果空间不够则0舍1入。所以float和double类型分别表示的2.5如下(二进制):
符号位
指数
尾数
0
1000 0000
010 0000 0000 0000 0000 0000
0
100 0000 0000
0100 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000
浮点数2.5可以用二进制小数准确表示(2.5=1*(2^1)+0*(2^0)+1*(2^-1)),但很多小数不可以准确表示
文章出处:DIY部落(http://www.diybl.com/course/3_program/c++/cppsl/2008629/129103.html)
huang_gen
2009-12-26
打赏
举报
回复
同意楼上的说法:
确实在内存中,int float的存储形式不同,int采取的事补码形式,float采取的是“指数形式”,如果你感兴趣,可以把float的内存信息用十六进制的形式输出进行研究,当把指数形式的二进制位信息按照int的补码进行解析的时候,往往结果不是我们期待的!
fthislife
2009-12-26
打赏
举报
回复
[Quote=引用 1 楼 stardust20 的回复:]
flaot和int在内存中的存取方式不同(具体没研究过)。。。然后你以float的形式去取int型的数据,和以float的形式去取float型的数据,虽然可能要取的数据大小相等,但是它们的存储方式不同,所以结果不同
[/Quote]
哪int强制转成float时的详细过程是怎样的?在内存中是进行怎样的运算的?
hlyces
2009-12-26
打赏
举报
回复
[Quote=引用楼主 fthislife 的回复:]
下边的程序什么输出的是9.000000 0.000000而不是9.000000 9.000000?
为什么会有差别?是什么原因引起的?
#include <stdio.h>
void main()
{
int c=9;
float a,*p;
a=(float)c;
p=(float*)(&c);
printf("%f %f\n",a,*p);
}
[/Quote]
===========================
你自己不是知道了么。p=(float *)(&(float)c)
stardust20
2009-12-26
打赏
举报
回复
flaot和int在内存中的存取方式不同(具体没研究过)。。。然后你以float的形式去取int型的数据,和以float的形式去取float型的数据,虽然可能要取的数据大小相等,但是它们的存储方式不同,所以结果不同
东大坡居士
2009-12-26
打赏
举报
回复
学习~~
fthislife
2009-12-26
打赏
举报
回复
[Quote=引用 11 楼 selooloo 的回复:]
a=(float)c; 是值转换,和计算机的自动类型转换一样的,也就是和a=c; 效果一样,这时计算机帮你完成转换
p=(float*)(&c);是将c的内存形式解释为浮点型,c的值是9,在内存中为 0x0009,二进制为
00000000 00000000 00000000 00001001
将其解释为浮点数就为
0 00000000 0000000 00000000 00001001
符号位 是0
指数 位是00000000
尾数 是0000000 00000000 00001001
根据浮点数的计算规则,*p的值就是1.00000000000000000001001*2-127
指数位是-127,是个很小的数 约等于0,由于浮点数的精度问题,打印结果就为0了
[/Quote]
指数位为什么是-127?
怎样算出来的?
coffeesen
2009-12-26
打赏
举报
回复
楼上回答是
含光剑
2009-12-26
打赏
举报
回复
[Quote=引用 11 楼 selooloo 的回复:]
a=(float)c; 是值转换,和计算机的自动类型转换一样的,也就是和a=c; 效果一样,这时计算机帮你完成转换
p=(float*)(&c);是将c的内存形式解释为浮点型,c的值是9,在内存中为 0x0009,二进制为
00000000 00000000 00000000 00001001
将其解释为浮点数就为
0 00000000 0000000 00000000 00001001
符号位 是0
指数 位是00000000
尾数 是0000000 00000000 00001001
根据浮点数的计算规则,*p的值就是1.00000000000000000001001*2-127
指数位是-127,是个很小的数 约等于0,由于浮点数的精度问题,打印结果就为0了
[/Quote]
强人。。仰慕下,指针好像必须要初始化,这样用很不安全。
wangxipu
2009-12-26
打赏
举报
回复
好基础的知识啊
selooloo
2009-12-26
打赏
举报
回复
a=(float)c; 是值转换,和计算机的自动类型转换一样的,也就是和a=c; 效果一样,这时计算机帮你完成转换
p=(float*)(&c);是将c的内存形式解释为浮点型,c的值是9,在内存中为 0x0009,二进制为
00000000 00000000 00000000 00001001
将其解释为浮点数就为
0 00000000 0000000 00000000 00001001
符号位 是0
指数 位是00000000
尾数 是0000000 00000000 00001001
根据浮点数的计算规则,*p的值就是1.00000000000000000001001*2-127
指数位是-127,是个很小的数 约等于0,由于浮点数的精度问题,打印结果就为0了
相同的 LLM 在「
不同
GPU 上」会产生
不同
输出
?为什么?
在大语言模型(LLMs)的部署及其相关的算力扩容过程中,更换 GPU 是否也可能会对模型的
输出
产生重大影响?这个问题的答案对于确保 LLMs 在
不同
硬件环境下的一致性和可靠性至关重要。我们今天为大家带来的这篇文章,作者的核心观点是:即使在相同的开发环境、系统配置和随机种子下,
不同
的 GPU 也会导致 LLMs 产生
不同
的模型
输出
。
同样的问题,为什么每次大模型
输出
的内容
不同
?
但在某些严谨的场景(如自动化测试、法律咨询、医疗诊断)中,答案的不可预测性可能带来困扰。也就是说,模型并不是直接“记住”了一整句话,而是根据当前输入的上下文,计算下一个可能出现的词的概率分布,并进行选择。理解这些机制,不仅能帮助开发者更有效地使用 LLM,还能在
不同
场景下调整策略,以获得最优的生成效果。“机器学习是一种广义的技术,包含决策树、支持向量机等,而深度学习是其中的一种子集,专注于神经网络。同样的问题可能在
不同
的语料中对应
不同
的答案,导致模型在
不同
采样时选择
不同
的表达方式。
为什么二极管在
不同
位置
输出
电压
不同
(数字逻辑电路)
二极管在
不同
位置
输出
电压
不同
的主要原因在于其。
为什么 inspect.getmembers() 在
不同
情况下给出
不同
的
输出
?
inspect.getmembers()函数在Python中用于获取对象的所有属性和方法,但默认会过滤掉以"_"开头的私有成员。当直接遍历返回结果时,可能误以为只获取了属性名。可通过设置filter参数控制过滤行为,如inspect.getmembers(obj, lambda x: not x.startswith('_'))来包含所有非私有成员。实际使用时需注意返回值是(名称,值)的元组列表,完整
输出
包含对象的全部公开和私有成员。
java
输出
两个_java-为什么两个
输出
不同
?
public class EvenOddWithTwoThreads **extends Thread**{private volatile int count = 1;private volatile boolean flag = false;@Overridepublic void run() {while(count <=10){synchronized (this) {while(f...
C语言
70,038
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章