cchessbd 发表于 2022-11-7 14:02:40

【已解决,可删帖】求助:怎么用lisp写数学上的mod求余函数?

本帖最后由 cchessbd 于 2022-11-8 08:12 编辑

(rem (- 100 150) 200) 返回的是-50,这与mod函数返回结果 150不一样,请问怎么用lisp写数学上的求余函数?


自贡黄明儒 发表于 2022-11-7 14:07:03

(rem 200 (- 100 150))???

cchessbd 发表于 2022-11-7 14:37:40

自贡黄明儒 发表于 2022-11-7 14:07
(rem 200 (- 100 150))???

不对。返回值为0。

菜卷鱼 发表于 2022-11-7 15:23:31

本帖最后由 菜卷鱼 于 2022-11-7 15:27 编辑

(rem 200(-150 100))

??

自贡黄明儒 发表于 2022-11-7 15:30:42

cchessbd 发表于 2022-11-7 14:37
不对。返回值为0。

mod函数是一个求余函数,其格式为: mod(nExp1,nExp2),即是两个数值表达式作除法运算后的余数。特别注意:在EXCEL中,MOD函数是用于返回两数相除的余数,返回结果的符号与除数(divisor)的符号相同。
你希望结果是多少呀?

ml2513 发表于 2022-11-7 15:43:55

学习学习{:1_1:}

guosheyang 发表于 2022-11-7 15:49:14

本帖最后由 guosheyang 于 2022-11-7 15:51 编辑

不能整除且同号时取被除数本身   异号不能整除时   取二者之和    好像是这样   Excel的算法和CAD的有点区别

guosheyang 发表于 2022-11-7 16:00:00

本帖最后由 guosheyang 于 2022-11-7 18:04 编辑

(defun mod(n1 n2)
(if(<(abs n1)(abs n2))
   (if(/= n1 0)
   (if(>(* n1 n2)0)
      n1
       (+ n1 n2)
   )
   0
)
   ( if(>(* n1 n2)0)
       (rem n1 n2)
       (*(if(minusp n2)-1 1)(-(abs n2)(rem(abs n1)(abs n2))))
)
)
) 有点繁琐哪位帮忙优化下

ytianxia 发表于 2022-11-7 17:47:21

本帖最后由 ytianxia 于 2022-11-7 17:49 编辑

我理解这应该就是 lisp和excel 对异号求余的理解不一致造成的吧,我试了下,excel 应该是以被除数的符号为准,而 CAD以除数符号为准。

(defun mod (n1 n2)
    (setq m (rem n1 n2))
    (if (< (* n1 n2) 0)
      (+ m n2)
      m
    )
)

8楼写的代码好像不太对,n1>n2 就不讨论了吗?
简单一些,正常求余,如果异号,那余数加上被除数就可以了。

guosheyang 发表于 2022-11-7 18:25:29

ytianxia 发表于 2022-11-7 17:47
我理解这应该就是 lisp和excel 对异号求余的理解不一致造成的吧,我试了下,excel 应该是以被除数的符号为 ...

n1>n2也考虑   只是搞复杂了   你这个简单明了
页: [1] 2
查看完整版本: 【已解决,可删帖】求助:怎么用lisp写数学上的mod求余函数?