lmathlib文件
lua的math库是通过lua扩展而来,主要对系统math库进行了一次封装,以供lua使用,一般可以从lmathlib文件开始阅读源码。
//绝对值
static int math_abs (lua_State *L) {
lua_pushnumber(L, l_mathop(fabs)(luaL_checknumber(L, )));
return ;
}
//正弦值
static int math_sin (lua_State *L) {
lua_pushnumber(L, l_mathop(sin)(luaL_checknumber(L, )));
return ;
}
//双曲正弦值
static int math_sinh (lua_State *L) {
lua_pushnumber(L, l_mathop(sinh)(luaL_checknumber(L, )));
return ;
}
//余弦值
static int math_cos (lua_State *L) {
lua_pushnumber(L, l_mathop(cos)(luaL_checknumber(L, )));
return ;
}
//双曲余弦值
static int math_cosh (lua_State *L) {
lua_pushnumber(L, l_mathop(cosh)(luaL_checknumber(L, )));
return ;
}
//正切值
static int math_tan (lua_State *L) {
lua_pushnumber(L, l_mathop(tan)(luaL_checknumber(L, )));
return ;
}
//双曲正切值
static int math_tanh (lua_State *L) {
lua_pushnumber(L, l_mathop(tanh)(luaL_checknumber(L, )));
return ;
}
//反正弦值
static int math_asin (lua_State *L) {
lua_pushnumber(L, l_mathop(asin)(luaL_checknumber(L, )));
return ;
}
//反余弦值
static int math_acos (lua_State *L) {
lua_pushnumber(L, l_mathop(acos)(luaL_checknumber(L, )));
return ;
}
//反正切值
static int math_atan (lua_State *L) {
lua_pushnumber(L, l_mathop(atan)(luaL_checknumber(L, )));
return ;
}
//X-Y平面上所对应的(x,y)坐标的角度
static int math_atan2 (lua_State *L) {
lua_pushnumber(L, l_mathop(atan2)(luaL_checknumber(L, ),
luaL_checknumber(L, )));
return ;
}
//向上取整,即取不小于x的最小整数
static int math_ceil (lua_State *L) {
lua_pushnumber(L, l_mathop(ceil)(luaL_checknumber(L, )));
return ;
}
//向下取整,即取不大于x的最大整数
static int math_floor (lua_State *L) {
lua_pushnumber(L, l_mathop(floor)(luaL_checknumber(L, )));
return ;
}
//计算x/y的余数
static int math_fmod (lua_State *L) {
lua_pushnumber(L, l_mathop(fmod)(luaL_checknumber(L, ),
luaL_checknumber(L, )));
return ;
}
//分解x,以得到x的整数和小数部分
static int math_modf (lua_State *L) {
lua_Number ip;
lua_Number fp = l_mathop(modf)(luaL_checknumber(L, ), &ip);
lua_pushnumber(L, ip);
lua_pushnumber(L, fp);
return ;
}
//计算平方根
static int math_sqrt (lua_State *L) {
lua_pushnumber(L, l_mathop(sqrt)(luaL_checknumber(L, )));
return ;
}
//计算x的y次幂
static int math_pow (lua_State *L) {
lua_Number x = luaL_checknumber(L, );
lua_Number y = luaL_checknumber(L, );
lua_pushnumber(L, l_mathop(pow)(x, y));
return ;
}
//计算指数幂
static int math_log (lua_State *L) {
lua_Number x = luaL_checknumber(L, );
lua_Number res;
if (lua_isnoneornil(L, ))
res = l_mathop(log)(x);
else {
lua_Number base = luaL_checknumber(L, );
if (base == (lua_Number)10.0) res = l_mathop(log10)(x);
else res = l_mathop(log)(x)/l_mathop(log)(base);
}
lua_pushnumber(L, res);
return ;
} #if defined(LUA_COMPAT_LOG10)
static int math_log10 (lua_State *L) {
lua_pushnumber(L, l_mathop(log10)(luaL_checknumber(L, )));
return ;
}
#endif
//以自然常数e为底的指数函数
static int math_exp (lua_State *L) {
lua_pushnumber(L, l_mathop(exp)(luaL_checknumber(L, )));
return ;
}
//将弧度转换为角度
static int math_deg (lua_State *L) {
lua_pushnumber(L, luaL_checknumber(L, )/RADIANS_PER_DEGREE);
return ;
}
//将角度转换为弧度
static int math_rad (lua_State *L) {
lua_pushnumber(L, luaL_checknumber(L, )*RADIANS_PER_DEGREE);
return ;
}
//把一个浮点数分解为尾数和指数
static int math_frexp (lua_State *L) {
int e;
lua_pushnumber(L, l_mathop(frexp)(luaL_checknumber(L, ), &e));
lua_pushinteger(L, e);
return ;
}
//计算value乘以2的exp次幂
static int math_ldexp (lua_State *L) {
lua_Number x = luaL_checknumber(L, );
int ep = luaL_checkint(L, );
lua_pushnumber(L, l_mathop(ldexp)(x, ep));
return ;
} //求最小值
static int math_min (lua_State *L) {
int n = lua_gettop(L); /* number of arguments */
lua_Number dmin = luaL_checknumber(L, );
int i;
for (i=; i<=n; i++) {
lua_Number d = luaL_checknumber(L, i);
if (d < dmin)
dmin = d;
}
lua_pushnumber(L, dmin);
return ;
} //求最大值
static int math_max (lua_State *L) {
int n = lua_gettop(L); /* number of arguments */
lua_Number dmax = luaL_checknumber(L, );
int i;
for (i=; i<=n; i++) {
lua_Number d = luaL_checknumber(L, i);
if (d > dmax)
dmax = d;
}
lua_pushnumber(L, dmax);
return ;
} //随机数
static int math_random (lua_State *L) {
/* the `%' avoids the (rare) case of r==1, and is needed also because on
some systems (SunOS!) `rand()' may return a value larger than RAND_MAX */
lua_Number r = (lua_Number)(rand()%RAND_MAX) / (lua_Number)RAND_MAX;
switch (lua_gettop(L)) { /* check number of arguments */
case : { /* no arguments */
lua_pushnumber(L, r); /* Number between 0 and 1 */
break;
}
case : { /* only upper limit */
lua_Number u = luaL_checknumber(L, );
luaL_argcheck(L, (lua_Number)1.0 <= u, , "interval is empty");
lua_pushnumber(L, l_mathop(floor)(r*u) + (lua_Number)(1.0)); /* [1, u] */
break;
}
case : { /* lower and upper limits */
lua_Number l = luaL_checknumber(L, );
lua_Number u = luaL_checknumber(L, );
luaL_argcheck(L, l <= u, , "interval is empty");
lua_pushnumber(L, l_mathop(floor)(r*(u-l+)) + l); /* [l, u] */
break;
}
default: return luaL_error(L, "wrong number of arguments");
}
return ;
} //设置随机种子
static int math_randomseed (lua_State *L) {
srand(luaL_checkunsigned(L, ));
(void)rand(); /* discard first value to avoid undesirable correlations */
return ;
}
lmathlib文件的更多相关文章
- Mapreduce的文件和hbase共同输入
Mapreduce的文件和hbase共同输入 package duogemap; import java.io.IOException; import org.apache.hadoop.co ...
- mapreduce多文件输出的两方法
mapreduce多文件输出的两方法 package duogemap; import java.io.IOException; import org.apache.hadoop.conf ...
- 01.SQLServer性能优化之----强大的文件组----分盘存储
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...
- SQL Server 大数据搬迁之文件组备份还原实战
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) ...
- SQLSERVER将一个文件组的数据移动到另一个文件组
SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...
- SQL Server中的高可用性(2)----文件与文件组
在谈到SQL Server的高可用性之前,我们首先要谈一谈单实例的高可用性.在单实例的高可用性中,不可忽略的就是文件和文件组的高可用性.SQL Server允许在某些文件损坏或离线的情况下,允 ...
- C# ini文件操作【源码下载】
介绍C#如何对ini文件进行读写操作,C#可以通过调用[kernel32.dll]文件中的 WritePrivateProfileString()和GetPrivateProfileString()函 ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
随机推荐
- iOS开发--UILabel可以显示\n
UILabel*label; //设置换行 label.lineBreakMode = UILineBreakModeWordWrap; label.numberOfLines = ; 换行符还是“\ ...
- [SublimeText] 如何创建工程
Sublime Text 可以很方便地管理多个工程.使用Sublime Text的Projects,可以将不同根目录的文件组织起来成为一个工程,而不用将所有的文件都放到一个根目录下面. 1. 创建工程 ...
- jquery 动态展示查询条件
<table class="queryTable" width="100%" > <tr> <td class="que ...
- React Native(十一)——按钮重复点击事件的处理
最初开始做后台管理系统的时候,就曾遇到过这样一种场景:"快速点击确认按钮,就会对此触发确认事件,导致多次请求数据库":于是最终我们得当的通过处理那个确认button,解决了上述问题 ...
- 在mysql存储过程中拼接sql解决in的字段类型不匹配问题
一个朋友问我一个问题,他写了一个存储过程,并在存储过程调用了另外一个自定义的函数.该函数返回类型如'1,34,56'的字符串,并将该字符串作为存储过程的select的id条件. begin DECLA ...
- 《Lua程序设计》9.1 协同程序基础 学习笔记
协同程序(coroutine)与线程(thread)差不多,也就是一条执行序列,拥有自己独立的栈.局部变量和指令指针,同时又与其他协同程序共享全局变量和其他大部分东西.从概念上讲线程与协同程序的主要区 ...
- Android学习之Gallery
在Android中,画廊控件Gallery用来显示图片列表,可以用手指直接拖动图片左右移动.Gallery只能水平显示一行,且Gallery列表中的图片会根据不同的拖动情况向左或向右移动,直到显示到最 ...
- WP8.1学习系列(第十章)——中心控件Hub设计指南
Windows Phone 应用商店应用中的中心控件指南 在本文中 说明 示例 用法指南 设计指南 相关主题 重要的 API Hub (XAML) HubSection (XAML) 说明 中心控 ...
- 【docker】 VI/VIM 无法使用系统剪贴板(clipboard)
docker 容器里边操作系统是ubuntu .默认是没有vim 的,需要自己安装一下 1 更新源 apt-get update 2 安装 vim apt-get install vim 此时.系统不 ...
- Qt编写视频播放器(vlc内核)
在研究qt+vlc的过程中,就想直接做个播放器用于独立的项目,vlc还支持硬件加速,不过部分电脑硬件不支持除外.用vlc的内核写播放器就是快,直接调用api就行,逻辑处理和ui展示基本上分分钟的事情, ...