浮点数是如何转换成ieee754代码的
在C语言中输入一个浮点数是如何转换成ieee754代码的网上资料都是将ieee754转换成数字没有逆向转换的还有就是求移码的问题将补码的符号位取反得到移码是否适用于任何数...
在C语言中 输入一个浮点数 是如何转换成ieee754代码的 网上资料都是将ieee754转换成数字 没有逆向转换的 还有就是求移码的问题 将补码的符号位取反得到移码是否适用于任何数字? 还有其他方法求解么?
请高手来解答下
百度上搜的就不要发了 能搜的我都搜过了
我指的是 比如我用float定义一个变量 然后给变量赋个值 系统要把这个数存放到内存中 是用ieee754标准将其转换的 而我正是想知道从我输入的这个数字 到系统将其转换成 符号+阶码+尾数 的过程是怎样的 其中的误差是如何产生的 仅此而已
首先 您的对其的含义我并不是很理解~可能是我计算机哪方面还没学到吧。。。不过看上去很像把十进制数转换成二进制数 能否具体的讲下
其次 对小数部分不能完全转换成2进制会产生误差 这我知道 可是比如 3.3 其小数不能不能完全转化成2进制 但是此C中用FLOAT定义的变量却能存放3.3而没有误差 相反 例如35435543这个数字 根本没有小数 但是C中却不能准确存放 能否讲下为什么
第三 您对阶码部分的转换很直接 但逆向转换时却要考虑 阶码的形式然后再对尾数转换 (其中阶码用的是移码) 如果按照您所说的话 那么+0或-0的转化过程中就会产生问题 我试了下还不是很理解 展开
请高手来解答下
百度上搜的就不要发了 能搜的我都搜过了
我指的是 比如我用float定义一个变量 然后给变量赋个值 系统要把这个数存放到内存中 是用ieee754标准将其转换的 而我正是想知道从我输入的这个数字 到系统将其转换成 符号+阶码+尾数 的过程是怎样的 其中的误差是如何产生的 仅此而已
首先 您的对其的含义我并不是很理解~可能是我计算机哪方面还没学到吧。。。不过看上去很像把十进制数转换成二进制数 能否具体的讲下
其次 对小数部分不能完全转换成2进制会产生误差 这我知道 可是比如 3.3 其小数不能不能完全转化成2进制 但是此C中用FLOAT定义的变量却能存放3.3而没有误差 相反 例如35435543这个数字 根本没有小数 但是C中却不能准确存放 能否讲下为什么
第三 您对阶码部分的转换很直接 但逆向转换时却要考虑 阶码的形式然后再对尾数转换 (其中阶码用的是移码) 如果按照您所说的话 那么+0或-0的转化过程中就会产生问题 我试了下还不是很理解 展开
1个回答
展开全部
“网上资料都是将ieee754转换成数字”这个我倒是真搜不到... 严格地说只有一个英文数学向的论文|||(更正 我连那个论文也找不到了)
最简单的方法(除了直接用C库的函数)
float s = 0;
for (;;)
{
s = s * 10 + *p - '0';
}
x.,xb
如果你想硬转的话,我只问你一个问题,把十进制有效数字对齐到二进制有效数字你有概念么,事实上浮点数和字符串装换主要的工作就只是这么一个问题。写程序不是抄抄代码就成的,基本原理你都没概念给你讲有什么用。
----
嘛... 其实已经告诉你了,把十进制有效数字对其到二进制上... 二不能被五整除所以对齐结果可能是无限小数;然后把10底的指数换算成2底的在把对齐时候的偏差也加进去就有了有效数字和指数(因为前面有效数字对齐了所以这个指数肯定是整数)。具体过程既然别人写出来是论文我写出来也不会好看到哪儿去。 论难度的话也就是高考数学大题稍强的水平吧,因为只是高三知识折腾来折腾去x.,x
----
你要理解这么个情况,知道这个算法并且还有闲心逛知道的就算除了我以外还有别人一只手也能数过来。这种没几个人知道的东西你觉得在没有基础铺垫的情况下我可能三言两语跟你说清楚么。所以我一直在给你传达的信息就是别研究这种没什么意义的东西了,实际操作中只要不是想彻底自己实现浮点数和字符串的相互转化,不可能用到这个(这也就是这个并不是特别难的算法为什么没几个人知道的另一方面原因,不过它依然很麻烦)。况且这个根本不是计算机问题而是彻头彻尾的数学问题。
最简单的方法(除了直接用C库的函数)
float s = 0;
for (;;)
{
s = s * 10 + *p - '0';
}
x.,xb
如果你想硬转的话,我只问你一个问题,把十进制有效数字对齐到二进制有效数字你有概念么,事实上浮点数和字符串装换主要的工作就只是这么一个问题。写程序不是抄抄代码就成的,基本原理你都没概念给你讲有什么用。
----
嘛... 其实已经告诉你了,把十进制有效数字对其到二进制上... 二不能被五整除所以对齐结果可能是无限小数;然后把10底的指数换算成2底的在把对齐时候的偏差也加进去就有了有效数字和指数(因为前面有效数字对齐了所以这个指数肯定是整数)。具体过程既然别人写出来是论文我写出来也不会好看到哪儿去。 论难度的话也就是高考数学大题稍强的水平吧,因为只是高三知识折腾来折腾去x.,x
----
你要理解这么个情况,知道这个算法并且还有闲心逛知道的就算除了我以外还有别人一只手也能数过来。这种没几个人知道的东西你觉得在没有基础铺垫的情况下我可能三言两语跟你说清楚么。所以我一直在给你传达的信息就是别研究这种没什么意义的东西了,实际操作中只要不是想彻底自己实现浮点数和字符串的相互转化,不可能用到这个(这也就是这个并不是特别难的算法为什么没几个人知道的另一方面原因,不过它依然很麻烦)。况且这个根本不是计算机问题而是彻头彻尾的数学问题。
迪凯特科技(北京)有限公司_
2025-01-03 广告
2025-01-03 广告
RS232串行通讯的数据格式包括以下组成部分:1. 起始位:一位,用于表示数据的开始。2. 数据位:通常为8位,但也可以是7位或9位。3. 校验位:可以选择奇偶校验或无校验。4. 停止位:一位,用于表示数据的结束,也可以选择使用1.5个或2...
点击进入详情页
本回答由迪凯特科技(北京)有限公司_提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询