所以我打算math從 python的庫中重新創建一些數學函式。
這些函式之一是math.gamma-function。由于我了解 JavaScript 的方法,我想我可以嘗試將Rosetta 代碼上 Lanczos 近似的JavaScript 實作轉換為 Applescript 代碼:
on gamma(x)
set p to {1.0, 676.520368121885, -1259.139216722403, 771.323428777653, -176.615029162141, 12.507343278687, -0.138571095266, 9.98436957801957E-6, 1.50563273514931E-7}
set E to 2.718281828459045
set g to 7
if x < 0.5 then
return pi / (sin(pi * x) * (gamma(1 - x)))
end if
set x to x - 1
set a to item 1 of p
set t to x g 0.5
repeat with i from 2 to count of p
set a to a ((item i of p) / (x i))
end repeat
return ((2 * pi) ^ 0.5) * (t ^ x 0.5) * (E ^ -t) * a
end gamma
運行所需的函式是:
on sin(x)
return (do shell script "python3 -c 'import math; print(math.sin(" & x & "))'") as number
end sin
Javascript 實作的所有其他功能都已被洗掉,以便沒有太多必需的功能,但我引入的行內操作產生了相同的結果。
這個 Javascript 代碼在嘗試在瀏覽器控制臺中運行時效果很好,但我的 Applescript 實作不會在接近實際結果的任何地方產生答案。是不是因為...
- ......我執行錯了嗎?
- ...Applescript 沒有足夠的精度?
- ……還有什么?
uj5u.com熱心網友回復:
您在代碼中犯了兩個錯誤:
首先,irepeat 陳述句中的 開始于 2 而不是 1,這對 來說很好(item i of p),但是需要在(x i).
其次,在(t ^ x 0.5)return 陳述句中的代碼中,tandx是先計算的,因為它們是指數,然后添加到0.5,但根據 JavaScript 實作,x和0.5需要先加在一起。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/362841.html
下一篇:用x模式填充方陣
