Lua练习题 第三章
本文部分内容来自  https://blog.csdn.net/qq_44800780/article/details/101060427
实践与网上学习结合
3.1

3.2
练习3.2
math.maxinterger *2 左移一位 0x1111…变成1111…10 对应的值就是-2
math.mininteger * 2 左移 10000…00 左移 000000 对应的值为0
math.maxinteger * math.maxinteger 0x1111 * 0x1111 进位后变成0x0000001结果为1
math.mininteger * math.mininteger 0x100000… * 0x10000… 最高位进位 最后变成0x000… 结果位0
3.3
- a % b == a - ((a // b) * b)
- a // b得到的商向负无穷取整
1 > for i =-10,10 do 2 >> print(i,i%3);end 3 -10 2 4 -9 0 5 -8 1 6 -7 2 7 -6 0 8 -5 1 9 -4 2 10 -3 0 11 -2 1 12 -1 2 13 0 0 14 1 1 15 2 2 16 3 0 17 4 1 18 5 2 19 6 0 20 7 1 21 8 2 22 9 0 23 10 1
3.4
1 > 2^3^4 2 2.4178516392293e+024 3 > 26-3……4 4 stdin:1: unexpected symbol near '26' 5 > 2^-3^4 6 4.1359030627651e-025 7 > 2^81 8 2.4178516392293e+024 9 >
练习3.5
12.7可以表示为以10为底的幂作为分母的分数,是否可以找到一个整数除以2的n次方得到结果为12.7即 x / 2^n = 12.7 以及 x / 2 ^ n = 5.5 x要求为整数
解决思路 从2的一次方开始 找到整数就返回
function find(num) local i = 0 for j = 1,63 do if(math.tointeger(num * 2^j) ~= nil) then print(num * 2^j,"/",2^j,"==",num) end end end find(12.7) find(5.5)
练习3.6
v = s* h/ 3
其中S是圆柱的底面积,h是圆柱的高,r是圆柱的底面半径。
function CalConevolume(h,angle) return ((math.tan(math.rad(angle)*h)^2.0*math.pi))*h / 3 end
练习3.7The Box–Muller transform 把一对均匀分布随机数映射到一对标准正态分布随机数。它有两种形式:
基本形式:用(0,1) (0,1)(0,1)均匀分布随机数,需要计算三角函数sin \sinsin和cos \coscos;
极坐标形式:用(−1,1) (-1,1)(−1,1)均匀分布随机数,且不需要计算三角函数。
function BoxMuller() local x = math.random() local y = math.random() x = (x==0) and 1 or x y = (y==0) and 1 or y return math.sqrt(-2*(math.log(x))) * math.sin(2*math.pi*y) end print(BoxMuller())
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号