关于float在32位和64位的转换?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于float在32位和64位的转换?相关的知识,希望对你有一定的参考价值。

书上知识都是以32位电脑为基础,也不讲一下和64位的区别,这就很误人子弟。#include<stdio.h>

int main()

int ilnt = 1;
char cChar = 'A';
float fFloat = 2.2f;
double result = ilnt+cChar+fFloat;
printf("%f\n", result);
return 0;

这段在32位等于69.2。到了64位就缺失了,成了68.199997。
有没有哪个大神细说一下,具体的过程。
粗略讲的,发链接的,都不用回复,谢谢

我看了一下,在vs的两种环境下,这段代码的汇编代码是完全一样的,执行结果也是相同的。

你的结果有所不同,一种可能是使用了不同的指令,这只能自己去弄清楚了。

如图在vs下,做了两个加法后,cvtss2sd指令把标量单精度浮点数转化为标量双精度浮点数,而xmm是sse指令常用的寄存器。

这只是见招拆招,你还需要去看一看cpu的专业文档才会真正明白32位和64位的本质区别,一本讲c语言的基础书籍,怎么可能会说到这方面的知识呢?(69.2应该是手误吧?)

追问

我又分别把各个值分别转换后输出,结果就是这样的,我主要问的不是核心,而是为什么会导致这种结果,不需要解释到最基本的原理上,但是也不要只是说句数据缺失。

参考技术A 请问你把这三种类型的数据相加想表达什么?
对c语言来说未定义的行为很多,你去深究也深究不完
如果说你对科学计算的精度缺乏信心,可以去看看标准库的math是怎么实现的,
里面肯定考虑了不同的平台
如果你用math库的标准函数,在不同平台算出了不同结果,再来问,我觉得意义大很多。
参考技术B 这个应该跟32位和64位没关系,可能是编译器不同编译选项影响浮点数精度的事情。
你可以分别在32位环境下和64位环境下分别打印sizeof(int)、sizeof(char)、sizeof(float)、sizeof(double)看看有没有区别。
再说32位下怎么也不可能算出69.2,如果说68.2那还有可能。

32位和64位有啥区别 32位和64位区别都有哪些

参考技术A 1、支持的内存不同,32位的操作系统最多支持4G的内存,但是64位系统支持可以支持4G、8G、16G、32G、64G、128G、256G等。

2、支持的处理器不同,64位的操作系统支持64位和32位的处理器,而32位的系统却不能完全支持64位的处理器。

3、支持的软件不同,64位系统支持32位和64位软件,32位系统仅支持32位软件。

4、32系统和64位系统处理数据的能力也不一样,理论上64位的系统会比32位快1倍。并且在系统体积方面,64位系统比32位系统大得多。

以上是关于关于float在32位和64位的转换?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建向所有用户 HKCU\... 配置单元(包括默认用户和域用户)写入 32 位和 64 位的 VBS 脚本

关于windows XP 64位与32位

32位和64位的区别

实现大小端之间的转换宏,包括32位和64位的数

32位和64位有啥区别 32位和64位区别都有哪些

电脑32位和64位有啥区别 电脑32位和64位的区别