1+ + 1 哪个快 ?
LISP代码,虽然都对,但是有执行的速度差别,下面问问(1+数)
与
(+ 数1)
哪个执行速度快?
希望大家写更多函数,说说怎么写,才执行的快。
本帖最后由 wyl219 于 2019-10-28 09:39 编辑
1+是+1的语法糖,本身1+在运行时会被翻译成+1,但是与编译类语言不同,lisp是解析类语言,每次运行的时候都要翻译一下,所以1+会多一点时间,但是这个影响很小.
(defun c:tt( / j t1 t2 t3 lst)
(setq j 1)
(repeat 10
(princ (strcat "\n第" (rtos j) "次测试开始"))
(setq t1 (getvar "TDUSRTIMER"))
(repeat 2000000(1+ 0))
(setq t2 (getvar "TDUSRTIMER"))
(repeat 2000000(+ 1 0))
(setq t3 (getvar "TDUSRTIMER"))
(princ (strcat "\n 1+耗时:" (rtos (* 86400(- t2 t1)) 2 3) "秒"
"\n +1耗时:" (rtos (* 86400(- t3 t2)) 2 3) "秒"
"\n +1耗时减1+时"(rtos (* 86400(- t3 t2 t2 (- t1))) 2 3)
))
(setq lst (cons (- t3 t2 t2 (- t1)) lst))
(setq j (1+ j))
)
(princ (strcat "\n 平均耗时差为" (rtos (/ (* 86400(apply '+ lst )) (1+ (length lst))) 2 3)))
(princ)
)
第6次测试开始
1+耗时:1.762秒
+1耗时:1.763秒
+1耗时减1+时0.001
第7次测试开始
1+耗时:1.766秒
+1耗时:1.769秒
+1耗时减1+时0.003
第8次测试开始
1+耗时:1.767秒
+1耗时:1.78秒
+1耗时减1+时0.013
第9次测试开始
1+耗时:1.763秒
+1耗时:1.792秒
+1耗时减1+时0.029
第10次测试开始
1+耗时:1.855秒
+1耗时:1.765秒
+1耗时减1+时-0.09
平均耗时差为-0.005
cable2004 发表于 2019-10-28 06:48
(defun c:tt()
(setq i 0)(setq t1 (getvar "TDUSRTIMER"))
(repeat 10000000 (setq i (+ 1 i)))
(princ (strcat "\n""+1耗时:" (rtos (* 86400(-(getvar "TDUSRTIMER")t1)) 2 0) "秒"))
(setq i 0)(setq t1 (getvar "TDUSRTIMER"))
(repeat 10000000 (setq i (1+ i)))
(princ (strcat "\n""1+耗时:" (rtos (* 86400(-(getvar "TDUSRTIMER")t1)) 2 0) "秒"))
(princ)
)
调换个个位置,结果又不一样了 (defun c:tt()
(setq i 0)(setq t1 (getvar "TDUSRTIMER"))
(repeat 10000000 (setq i (1+ i)))
(princ (strcat "\n""1+耗时:" (rtos (* 86400(-(getvar "TDUSRTIMER")t1)) 2 0) "秒"))
(setq i 0)(setq t1 (getvar "TDUSRTIMER"))
(repeat 10000000 (setq i (+ 1 i)))
(princ (strcat "\n""+1耗时:" (rtos (* 86400(-(getvar "TDUSRTIMER")t1)) 2 0) "秒"))
(princ))
当然是1+快快 论区别,个人觉得 1+ 写起来顺手,速度没差 机器内存驻留的问题,能够得到大概的判断就可以! 这个还有区别呀? 从来没有想过这个问题,哪个顺手用哪个呗 现在已经过了硬件性能低下的年代,现在的编程都是大型化,需要集体协作以及几代人的努力,易读易维护更为重要。为了提高一点点性能而导致代码晦涩难懂,别人无法维护,实在是得不偿失。时代在发展技术在进步,以往的措施并一定适应现在,现在的也不一定适用未来。
页:
[1]
2