需要解释 Lisp 中的反向科学记数法函数

Need explanation on reverse scientific notation function in Lisp

这是我知道的函数,从 1) 你的系数和 2) 你的指数,然后从科学记数法中提取数字。

示例:

coefficient 7, 
exponent 3 

7 * 10^3 = 7000

(define (scientific coeffiecent exponent) (* coefficient (expt 10 exponent)))

这是我正在努力解决的问题:反过来的函数,从 7000 到用于将其转化为科学记数法的系数和指数。我通过网络获得了一个工作功能,但真的很难完全理解它。

(define (sci-exponent number)
  (floor (/ (log number) (log 10))))

(define (sci-coefficient number)
  (/ number (expt 10 (sci-exponent number))))

如果有人能帮助我理解,将不胜感激!感谢您以任何方式阅读!

sci-exponent的正文,它占log(number)/log(10)的地板。你可能还记得数学 class:loga(n1)/loga(n2) = log n2(n1)。所以你得到的是 log10(number),它的底数是 number 减 1 的位数,这将是科学计数法。

然后可以很容易地从指数中导出系数。因为,正如您所写,coeff * exp = number,然后是 number / exp = coeff,这正是 sci-coefficient 正在实施的。