double到int的快速转换
double到int的快速转换
(2014-01-19 13:39:56)
标签:
doublelong数值类型转换快速 |
先把代码贴上来,其实是lua的源代码,:-)
=============================================================
#if defined(LUA_NUMBER_DOUBLE) && !defined(LUA_ANSI) && !defined(__SSE2__) && \
(defined(__i386) || defined (_M_IX86) || defined(__i386__))
union
luai_Cast {
double
l_d;
long
l_l; };
#define lua_number2int(i,d) \
{
volatile
union
luai_Cast u; u.l_d = (d) + 6755399441055744.0; (i) = u.l_l; }
#define lua_number2integer(i,n) lua_number2int(i, n)
#else
#define lua_number2int(i,d) ((i)=(int)(d))
#define lua_number2integer(i,d) ((i)=(lua_Integer)(d))
#endif
===========================================================
帖子原文在这里
http://rangercyh.blog.51cto.com/1444712/1313162
作者也分析了原因。
我就不罗嗦了,记得有这个方法就好。
最后,我做了小实验,比较一下这个方法和直接类型转换的速度差别。
#define LOOPS 200000000
union luai_Cast { double l_d; long l_l; };
#if 1
#define dbl2int(d, i)\
{ volatile union luai_Cast u; u.l_d = (d) + 6755399441055744.0; (i) = u.l_l; }
#else
#define dbl2int(d, i) (d)+=6755399441055744.0; (i)=*(int*)&d;
#endif
int main(int argc, char* argv[])
{
printf("Hello World!\n");
long val;
double dbl=7.56;
long t1 = GetTickCount();
for (int i=0; i
{
dbl2int(dbl, val);
dbl=i;
val+=1;
}
long t2 = GetTickCount();
printf("start: %d\n end: %d\ntime=%d\n", t1, t2, t2-t1);
dbl=7.86;
long t3 = GetTickCount();
for (int j=0; j
{
val=(int)dbl;
dbl=j;
val+=1;
}
long t4 = GetTickCount();
printf("start: %d\n end: %d\ntime=%d\n\n %f\n\n", t3, t4, t4-t3, 1.0*(t4-t3)/(t2-t1));
printf("val=%d\n", val);
return 0;
}
运行结果如下:
Hello World!
start: 11795010
end: 11795761
time=751
start: 11795761
end: 11799546
time=3785
5.039947
val=199999999
Press any key to continue
速度相差5倍。
同时还比较了联合与指针运算的速度差别,用指针取值也是需要时间的,不如联合快,意料之中的。
double到int的快速转换相关推荐
- Gson int类型被转换成double问题解决(完美解决)
一.问题复现 1.1.BaseResponse类 class BaseResponse<T>(val code: Int = -1,val message: String? = null ...
- 【数论】快速幂:实现pow(double ,int)
实现函数 double Power(double base, int exponent),求base的exponent次方. 注意: 1.保证base和exponent不同时为0. 2.不得使用库函数 ...
- double转换成int java,Java将double转换为int
本文概述 我们可以使用类型转换在Java中将double转换为int.要将double数据类型转换为int, 我们需要执行类型转换. Java中的类型转换通过类型转换运算符(数据类型)执行. 在这里, ...
- 浮点数到整数的快速转换
之前在看 lua 源码的时候,看到一处浮点数转整数的方法,当时确实吓我一跳,后来在网上搜索了才知道浮点数原来还有这么神奇的地方,我看到一篇喜欢的文章,翻译一下(英文一般还请见谅),大家要闲着没事可以看 ...
- double转换为int以及浮点型相加损失精度问题
最近在做支付相关模块的业务,数据库字段却使用的是double类型,其实也行,只要计算不在sql语句中进行,也是没有问题的. 预先的类属性设置的是Double类型,自己算的时候发现小数相加会出现损失精度 ...
- 解决 java double 减 int 型 产生的精度问题
我们先来看一段代码 public class Test_1 {public static void main(String[] args) {String e = "1.01";/ ...
- python转换八进制用取余数方法_python 二、八、十六进制之间的快速转换
一.进制转换 1.2 十进制转二进制 bin(18)--> '0b10010' 去掉0b就是10010 即为十进制18转二进制是10010 十进制转八进制oct(18) --> ...
- Java对于字符串的处理【String和int之间的转换、字符串拼接、字符串获取长度、字符串大小写转换、字符串去空格、字符串分割、字符串替换、字符串提取、字符串比较、字符串查找】
文章目录 String字符串 和 整型int 的相互转换 String转化为int int 转换为 String 字符串拼接 使用连接运算符 "+" 使用 concat() 方法 ...
- double 转 int
关于double转int类型,先看强转的例子:Double a = 2.3 * 100;int i = new Double(a).intValue();System.out.println(i);输 ...
最新文章
- Qt中两种定时器用法
- 如何在ubuntu下使用samba创建共享
- 留着肯定有用,让你脱胎成技术大神的JAVA开发技巧
- 科学家从脑电图中解读大脑的运动意图
- 编译高性能linux so库,关于如何在linux环境下生成a库和so库(改,附图)-Go语言中文社区...
- 深度学习(三十七)——CenterNet, Anchor-Free, NN Quantization
- DevOps时代,企业数字化转型需要强大的工具链
- eigen库安装_OpenCV+Eigen上位机程序移植(七十一)
- 苹果ipa软件包破解笔记
- 联想开机启动项按哪个_win7系统如何修改系统启动项 win7系统修改系统启动项方法【步骤】...
- java 使用apollo,Springboot apollo原理及使用方法详解
- javascript判断非空
- Hibernate中hbm.xml文件的inverse、cascade、fetch、outer-join、lazy
- 3.2 语音识别概述
- c语言编程 猜字游戏
- 9月【笔耕不辍】勋章活动获奖名单公布
- 如何在项目中规范git commit格式
- BehaviorTree + Groot 在ros中的运用
- EasyUI的基本使用布局
- springboot医疗管理系统 毕业设计-附源码015221