返回信息流round function :
round x(double) to the nearest integer, but round halfway cases away from zero (regardless of the current rounding direction)
such as
round(1.2) = 1.0
round(1.5) = 2.0
round(-1.5) = -2.0
这是一条镜像帖。来源:北邮人论坛 / cpp / #73322同步于 2013/8/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[问题]使用汇编尽量高效地实现round操作
zx723
2013/8/23镜像同步19 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
根据指数部分移位取出小数部分然后修正?
早都忘光光了IEEE的标准,随口乱说一下勿要介意。
我觉的gcc的实现必然是一个足够高效的实现吧,而且也应该再高效不到哪去了。
【 在 zxsword 的大作中提到: 】
: 根据指数部分移位取出小数部分然后修正?
: 早都忘光光了IEEE的标准,随口乱说一下勿要介意。
: 我觉的gcc的实现必然是一个足够高效的实现吧,而且也应该再高效不到哪去了。
在做一些东西,不适合调用glibc的round函数,因为函数调用本身也有不小的开销
SSE4.1提供了一些指令(ROUNDSD,ROUNDPD,ROUNDSS,ROUNDPS),可以完成你说的功能
楼主可以去查查
【 在 zx723 的大作中提到: 】
: round function :
: round x(double) to the nearest integer, but round halfway cases away from zero (regardless of the current rounding direction)
: such as
: ...................
既然你提到了汇编,那就不得不提芯片架构了~否则别人怎么知道你所处的工作平台呢~汇编想提高效率很大程度上也是依据硬件特性来做优化的~
【 在 zx723 的大作中提到: 】
: 在做一些东西,不适合调用glibc的round函数,因为函数调用本身也有不小的开销
那直接把gcc的实现给抄过来?
【 在 zx723 的大作中提到: 】
: 在做一些东西,不适合调用glibc的round函数,因为函数调用本身也有不小的开销
拉gcc源码和自己写的途径是一样的~都是路径依赖,gcc的math库也是依据硬件标准(arch/***/math_emu/math.cpp)来进行实现的~
所以我才说要先搞清楚工作平台~
【 在 zxsword 的大作中提到: 】
: 那直接把gcc的实现给抄过来?
【 在 tonyjansan 的大作中提到: 】
: 既然你提到了汇编,那就不得不提芯片架构了~否则别人怎么知道你所处的工作平台呢~汇编想提高效率很大程度上也是依据硬件特性来做优化的~
:
把ARMV8中的frinta指令翻译成到x86,但是并不是直接用x86汇编来做,而是翻译成LLVM的IR。目前项目用的3.3版本。。。没有llvm.round这个intrinsic。自己想的要用10多条汇编(IR)才可以完成。
【 在 lifesider 的大作中提到: 】
: SSE4.1提供了一些指令(ROUNDSD,ROUNDPD,ROUNDSS,ROUNDPS),可以完成你说的功能
: 楼主可以去查查
把ARMV8中的frinta指令翻译成到x86,但是并不是直接用x86汇编来做,而是翻译成LLVM的IR。所以也不能直接使用这些指令。。。