double强制类型转换int64_t的结果为0问题
发布日期:2021-06-30 10:11:32
浏览次数:5
分类:技术文章
本文共 647 字,大约阅读时间需要 2 分钟。
armv71 gcc 4.6.3 内核态xenomai
测试代码1:
int64_t func(){ double a; ... return (int64_t)a;}
返回值一直都是0.
改为:
int64_t func(){ double a; ... return (int32_t)a;}
返回值正确。
同样是32位,x86下使用却都是正确的。
分析
这里尝试分析一下汇编代码:
int64_t强转部分代码:
9970: ee32 0b01 vadd.f64 d0, d2, d1 ;d0 := d2 + d1 9974: f001 f9a0 bl acb8 <__aeabi_d2lz> ; 9978: 6320 str r0, [r4, #48] ; 0x30 ; [r4, #48] := r0
int32_t强转部分代码:
996a: ee32 0b01 vadd.f64 d0, d2, d1 996e: eebd 0bc0 vcvt.s32.f64 s0, d0 9972: ed80 0a0c vstr s0, [r0, #48] ; 0x30
这里vcvt.s32.f64是VFP指令,使用的是浮点硬件单元FPU进行计算处理的,其中并不包含s64。
而__aeabi_d2lz为双精度到整型C型转换,是调用软件函数库进行处理的。
目前猜测是由于__aeabi_d2lz出错?
转载地址:https://islet.blog.csdn.net/article/details/113866003 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月28日 20时30分50秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ROS安装
2019-04-30
IaaS,PaaS,SaaS 的区别
2019-04-30
元数据 metadata
2019-04-30
智能体 Intelligent Agent
2019-04-30
Network Compression网络压缩(一)
2019-04-30
GAN系列(零)—— GAN的发展(两条路线)
2019-04-30
Conditional GAN (CGAN) 条件生成网络
2019-04-30
强化学习(三) —— Policy Gradient 策略梯度
2019-04-30
图像风格转换(一)——图像风格转换v1算法
2019-04-30
AI换脸
2019-04-30
ROS(一)——ROS发展史 & ROS是什么(通信机制+开发工具+应用功能+生态系统)
2019-04-30
ROS(三)——命令行工具的使用
2019-04-30
ROS(四)——创建工作空间与功能包 & Catkin编译系统
2019-04-30
ROS(五)——发布者Publisher的编程实现(C++ & Python)
2019-04-30
Kubernetes(K8s) & pod
2019-04-30
Azure微软云 & AWS &Amazon EC2
2019-04-30
CLI
2019-04-30
查看Windows操作系统版本
2019-04-30
Win10 Linux子系统 WSL1升级至WSL2
2019-04-30