尘缘一生 发表于 2019-10-28 02:32:44

1+ + 1 哪个快 ?

LISP代码,虽然都对,但是有执行的速度差别,下面问问

(1+数)



(+ 数1)

哪个执行速度快?

希望大家写更多函数,说说怎么写,才执行的快。

wyl219 发表于 2019-10-28 09:19:02

本帖最后由 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


LPACMQ 发表于 2019-10-28 06:54:28

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)
)
调换个个位置,结果又不一样了

cable2004 发表于 2019-10-28 06:48:22

(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))

crtrccrt 发表于 2019-10-28 06:14:17

当然是1+快快

LPACMQ 发表于 2019-10-28 06:52:30

论区别,个人觉得 1+ 写起来顺手,速度没差

cable2004 发表于 2019-10-28 07:13:24

机器内存驻留的问题,能够得到大概的判断就可以!

纵横八方 发表于 2019-10-28 07:55:25

这个还有区别呀?

taoyi0727 发表于 2019-10-28 08:02:50

从来没有想过这个问题,哪个顺手用哪个呗

mikewolf2k 发表于 2019-10-28 09:47:13

现在已经过了硬件性能低下的年代,现在的编程都是大型化,需要集体协作以及几代人的努力,易读易维护更为重要。为了提高一点点性能而导致代码晦涩难懂,别人无法维护,实在是得不偿失。时代在发展技术在进步,以往的措施并一定适应现在,现在的也不一定适用未来。
页: [1] 2
查看完整版本: 1+ + 1 哪个快 ?