Skip to content

Instantly share code, notes, and snippets.

@CandyMi
Last active December 5, 2021 13:30
Show Gist options
  • Select an option

  • Save CandyMi/b677ede6fc9bb9eae4e3c3d465d84a79 to your computer and use it in GitHub Desktop.

Select an option

Save CandyMi/b677ede6fc9bb9eae4e3c3d465d84a79 to your computer and use it in GitHub Desktop.
对Lua、js、Python等脚本语言浮点数运算进行简单性能测试.

简单的浮点数运算示例

CPU 主频
i5-10400 2.9GHz
  • CPU - i5-10400 2.9GHz

  • OS - Linux

测试代码

各个测试脚本可从下面找到.

示例1

1亿次分解成整数部分和小数部分 - 使用modf函数耗时在9秒左右.

示例2

1亿次分解成整数部分和小数部分 - 使用强制类型转换耗时在12秒左右.

示例3与4

1亿次分解成整数部分和小数部分 - 使用操作符的(取模、取整)实现耗时4秒左右.

lua 与 luajit 测试

同样的代码实现, 完成测试lua需要0.746luajit仅需0.026秒.

Nodejs测试

Node v10.24版本中, js完成测试仅需0.42秒.

let f, i
for (let index = 0; index < 100000000; index++){
f = 3.1415 % 1
i = 3.1415 - f
}
console.log(f, i)
/*
root@server:~/test$ time node main.js
0.14150000000000018 3
real 0m0.424s
user 0m0.414s
sys 0m0.010s
root@server:~/test$ time node main.js
0.14150000000000018 3
real 0m0.426s
user 0m0.406s
sys 0m0.021s
root@server:~/test$ time node main.js
0.14150000000000018 3
real 0m0.427s
user 0m0.407s
sys 0m0.021s
*/
local i, f
for _ = 1, 1e8 do
f = 3.1415 % 1
i = 3.1415 - f
end
print(f, i)
--[[
## 使用5.3
root@server:~/test$ time lua script/main.lua
0.1415 3.0
real 0m0.746s
user 0m0.745s
sys 0m0.000s
root@server:~/test$ time lua script/main.lua
0.1415 3.0
real 0m0.742s
user 0m0.740s
sys 0m0.000s
root@server:~/test$ time lua script/main.lua
0.1415 3.0
real 0m0.749s
user 0m0.748s
sys 0m0.000s
## 使用luajit
root@server:~/test$ time luajit script/main.lua
0.1415 3
real 0m0.028s
user 0m0.027s
sys 0m0.000s
root@server:~/test$ time luajit script/main.lua
0.1415 3
real 0m0.027s
user 0m0.026s
sys 0m0.000s
root@server:~/test$ time luajit script/main.lua
0.1415 3
real 0m0.027s
user 0m0.026s
sys 0m0.000s
--]]
#!/usr/bin/python
import sys
if sys.version_info >= (3, 0):
xrange = range
import math
modf = math.modf
for _ in xrange(int(1e8)) :
f, i = modf(3.1415)
print(f, i)
'''
root@server:~/test$ time python main.py
(0.14150000000000018, 3.0)
real 0m8.912s
user 0m8.885s
sys 0m0.010s
root@server:~/test$ time python main.py
(0.14150000000000018, 3.0)
real 0m8.833s
user 0m8.786s
sys 0m0.030s
root@server:~/test$ time python main.py
(0.14150000000000018, 3.0)
real 0m9.472s
user 0m9.454s
sys 0m0.000s
'''
#!/usr/bin/python
import sys
if sys.version_info >= (3, 0):
xrange = range
# import math
# modf = math.modf
for _ in xrange(int(1e8)) :
i = int(3.1415)
f = 3.1415 - i
print(f, i)
'''
root@server:~/test$ time python main.py
(0.14150000000000018, 3)
real 0m12.760s
user 0m12.735s
sys 0m0.000s
root@server:~/test$ time python main.py
(0.14150000000000018, 3)
real 0m12.901s
user 0m12.870s
sys 0m0.000s
root@server:~/test$ time python main.py
(0.14150000000000018, 3)
real 0m12.830s
user 0m12.804s
sys 0m0.000s
'''
#!/usr/bin/python
import sys
if sys.version_info >= (3, 0):
xrange = range
for _ in xrange(int(1e8)) :
f = 3.1415 % 1
i = 3.1415 - f
print(f, i)
'''
root@server:~/test$ time python main.py
(0.14150000000000018, 3.0)
real 0m4.914s
user 0m4.905s
sys 0m0.000s
root@server:~/test$ time python main.py
(0.14150000000000018, 3.0)
real 0m4.898s
user 0m4.889s
sys 0m0.000s
root@server:~/test$ time python main.py
(0.14150000000000018, 3.0)
real 0m4.896s
user 0m4.887s
sys 0m0.000s
'''
#!/usr/bin/python
import sys
if sys.version_info >= (3, 0):
xrange = range
for _ in xrange(int(1e8)) :
i = 3.1415 // 1
f = 3.1415 - i
print(i, f)
'''
root@server:~/test$ time python main.py
(0.14150000000000018, 3.0)
real 0m4.912s
user 0m4.882s
sys 0m0.020s
root@server:~/test$ time python main.py
(0.14150000000000018, 3.0)
real 0m4.929s
user 0m4.911s
sys 0m0.010s
root@server:~/test$ time python main.py
(0.14150000000000018, 3.0)
real 0m4.926s
user 0m4.916s
sys 0m0.000s
'''
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment