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,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
随机推荐
- RF-For循环使用
场景1:
- Android文件系统编译出错记录
错误1: 注意:external/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessageLite.java 使用了未经检查或不 ...
- 使用Postfix和Dovecot收发电子邮件
邮件应用协议包括: 简单邮件传输协议(SMTP),用来发送或中转发出的电子邮件,占用tcp 25端口. 第三版邮局协议(POP3),用于将服务器上把邮件存储到本地主机,占用tcp 110端口. 第四版 ...
- radio的取值
<dd id="pingjia${evaluation.orderItemId }" class="ms-wf clearfix" idx="$ ...
- php curl那点事儿
curl是最常用功能之一初始化句柄 $ch = curl_init(); post 传$data 1. 如果$data是字符串,则Content-Type是application/x-www-form ...
- iOS 动画效果:Core Animation & Facebook's pop
本文转载至 http://www.cocoachina.com/ios/20151223/14739.html 感谢原创作者分享 前言相信很多人对实现 iOS 中的动画效果都特别头疼,往往懒得动手,功 ...
- 【Laravel5】 定制错误页面
laravel5 所有异常错误都由类 App\Exceptions\Handler 处理,该类包含两个方法: report 和 render . 这里我们只看 render ...
- 【基础】httpclient注意事项
一.HttpClient有默认的执行器RetryExec,其默认的重试策略是DefaultHttpRequestRetryHandler. RetryExec在执行http请求的时候使用的是底层的基础 ...
- PhpDocumentor
phpDocument是一个通用的生成PHP文档的工具,他本身也是用PHP写的,跟JAVADoc有些相似,但他有不同于PHPDoc,他比PHPDOC要快,而且能够解析的PHP范围更广,他本身包含了11 ...
- 用AT命令调试调制解调器
最早生产调制解调器的公司是贺氏,后来组建的厂家制造的调制解调器都与HAYES兼容,大部分的通信软件使用菜单来对调制解调器进行配置.检测.但是有些通信软件要求用户直接发命令给调制解调器,在这种情况下必须 ...