博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
奇怪的X86
阅读量:2422 次
发布时间:2019-05-10

本文共 1003 字,大约阅读时间需要 3 分钟。

printf的0x8llx格式在X86平台下,无法对double进行有效的格式化。

但是在ARM平台就可以。

同事告诉我的原因,可能是ARM平台拥有更多的冗余寄存器,可以完成这部分展开。

但是X86的寄存器却很少。

而且这个X86的非对齐访问有关系吗?

这段代码运行错误

static void do_it(const char *fname, double r[], double p[], double (*tri)(double)){	FILE* fd = fopen(fname, "w");	int i;	double d;	for (i = 0; i < POOL_MAX; i++) {				d = tri(p[i]);		r[i] = d;		printf("%.16e\n",r[i]);		printf("%.16e\n",d);		printf("%d---%llx\n", i, r[i]);		printf("%d---%llx\n", i, d);		fprintf(fd, "%08llx\n", r[i]);	}		fclose(fd);	}

这段代码运行正常

(而且如果你尝试用d=(unsigned long long int)l)这样方式,也会得到错的结果,一定要用memcpy。

X86的类型强制转换似乎非常保守,要么就是GCC的问题。

static void do_it(const char *fname, double r[], double p[], double (*tri)(double)){	FILE* fd = fopen(fname, "w");	int i;	double d;	unsigned long long int l;	for (i = 0; i < POOL_MAX; i++) {		d = tri(p[i]);		r[i] = d;		memcpy(&l, &r[i], sizeof(l));		printf("%.16e\n",r[i]);		printf("%.16e\n",d);		printf("%08llx\n", l);		fprintf(fd, "%08llx\n", l);	}		fclose(fd);	}

转载于:https://my.oschina.net/rinehart/blog/167588

你可能感兴趣的文章
使用Rancher 安装K8S
查看>>
K8S基本概念视频教学学习笔记
查看>>
【转】Kubernetes高可用负载均衡与集群外服务访问实践
查看>>
【转】Rancher 2.0:K8s之上的Rancher魔法
查看>>
【转】内网福音-如何离线部署Rancher
查看>>
Rancher中K8S仪表板Service unavailable故障的解决办法
查看>>
全都开源了,还怎么赚钱?----卖技术服务啊!
查看>>
如何获得Rancher的免费社区支持
查看>>
CentOS7上运行Rancher的潜在问题之devicemapper
查看>>
使用Rancher webhook实现弹性扩容缩容
查看>>
【转】Docker Volume 之权限管理-Docker运行gogs容器时使用-v参数映射本地目录-报权限错误的原因及解决办法
查看>>
【转】Docker 运行时资源限制-内存memory、交换机分区Swap、CPU
查看>>
【转】etcd 启用 https-如何搞定证书、秘钥、SSL、TSL加密等问题
查看>>
Rancher的管理员密码忘记怎么办?-登录RancherServer的mysql容器内,修改cattle库setting表中2个关于访问控制的字段的值
查看>>
K8S客户端Kubectl无法下载问题的解决办法-到中科大USTC下载
查看>>
Docker相关的网络问题-软件源和镜像加速器
查看>>
Rancher中的容器如何使用固定的IP地址?-使用io.rancher.container.requested_ip标签
查看>>
如何批量删除Docker中已停止的容器?-可以有多种方式
查看>>
使用RancherServer:v1.6.12部署K8S-v1.8.3
查看>>
单节点Rancher Server v1.6.10版升级到v1.6.12版实验(上)
查看>>