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,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
随机推荐
- VS无法导航到插入点F12失败
关闭VS 开启控制台并导航到Visual安装文件夹,例如C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\ID ...
- UITableView+FDTemplateLayoutCell源码学习笔记
本文转载至 http://www.cocoachina.com/bbs/read.php?tid=299773 基本原理是通过缓存每个cell的高度,当tableview回调delegate的hei ...
- Android开发训练之第五章第五节——Resolving Cloud Save Conflicts
Resolving Cloud Save Conflicts IN THIS DOCUMENT Get Notified of Conflicts Handle the Simple Cases De ...
- 【python】flask 开启 debug 模式
方法一: 直接在run的时候添加debug from flask import Flask app = Flask(__name__) @app.route('/') def hello_world( ...
- 【大数据系列】MapReduce示例好友推荐
package org.slp; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import ...
- css方法 - 移动端h5在iphonex的适配
@media only screen and (device-width:375px) and (device-height:812px) and (-webkit-device-pixel-rati ...
- datatable 使用LAMBDA表达查询,过滤
DataTable dt = new DataTable(); DataColumn dc = new DataColumn("UserName", System.Type.Get ...
- [Apio2008]免费道路[Kruscal]
3624: [Apio2008]免费道路 Time Limit: 2 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1292 Solved: ...
- python nose测试框架全面介绍三
三.nose的测试工具集 nose.tools模块提供了一系列的小工具,包括测试执行时间.异常输出及unittest框架中所有的assert功能. 为了使写用例更加容易,nose.tools提供了部分 ...
- Windows运行python脚本文件
开始学习python就是听说这个语言写脚本文件特别方便,简单使用.学了一段时间,但是直到现在我才直到直到怎么在Windows的cmd上运行脚本文件. 之前一直都是在pycharm上运行,并不实用. 百 ...