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,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
随机推荐
- 数字图像处理笔记与体会(一)——matlab编程基础
最近开始学习数字图像处理,使用matlab实现,下面我就来记录笔记和体会,一方面是给大家提供参考,另一方面是防止我忘记了. 复习一下: 1.数字图像是用一个数字矩阵来表示的,数字阵列中的每个数字,表示 ...
- JTAG、JLink、ULINK、ST-LINK仿真器区别(转)
首先要了解一下JTAG. JTAG协议 JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试.现在多数 ...
- codeforcess水题100道
之所以在codeforces上找这100道水题的原因是为了巩固我对最近学的编程语言的掌握程度. 找的方式在codeforces上的PROBLEMSET中过的题最多的那些题里面出现的最前面的10个题型, ...
- RabbitMQ备份交换器
备份交换器,AlternateExchange(AE): 备份交换器是为了实现没有路由到队列的消息,与上篇介绍到的mandatory都是为了处理没有路由到的消息. AE相对于mandatory逻辑更简 ...
- uefi安装win7,deepin15双系统后grub没有windows选项
本帖最后由 873792861 于 2015-12-23 16:17 编辑 如题,首先电脑是GPT+uefi的,电脑上安装有64位的win7.用U盘工具制造好驱动U盘后,在安装时选择 专家模式 ,选择 ...
- Qt编写输入法终极版V2018
输入法是很多Qt+嵌入式linux开发的同学的痛,自从5.7自带了输入法后,这个痛终于缓解了不少,不过还有大量的嵌入式linux程序停留在qt4时代,为此特意选择了QWidget来写这个输入法,为了兼 ...
- Android手机端抓包方法
抓包准备 1. Android手机需要先获得root权限.一种是否获得root权限的检验方法:安装并打开终端模拟器(可通过安卓市场等渠道获得).在终端模拟器界面输入su并回车,若报错则说明未root, ...
- tars环境部署
author: headsen chen date: 2018-10-18 12:35:40 注意:依据Git上的tars搭建步骤整理而来 参考: https://max.book118.com/h ...
- FastDFS client for .net
fastDfs Code: https://code.google.com/p/fastdfs/ FastDfs_Client_DotNet:https://code.google.com/p/fas ...
- elk单台环境搭建
一.简介1.核心组成ELK由Elasticsearch.Logstash和Kibana三部分组件组成:Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分 ...