大きな数字同士の平均値を求めるAppleScriptです。大きい数字というのは、桁数が(大きい方に)多いものと、小数点以下の桁数が多いものを指しています。
AppleScriptの数値は10桁ぐらいで指数表示になってしまう、一種のウィークポイントですが、数値を文字で保持することでこのように計算できます。
テキストで書いた数値をリストに入れて計算しますが、ヌル要素が入っていると問題になるのであらかじめヌル要素は削除するようにしています。
ちょうど、書籍の原稿で巨大な配列要素を追加するベンチマークを実施したさいに、5回実行してその平均値を求めるために書いたものです。
AppleScript名:大きな数値同士の平均値を求める |
— – Created by: Takaaki Naganoya – Created on: 2021/03/26 — – Copyright © 2021 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions set aList to {"", "0.4345240592956544", "0.3104130029678344192", "0.3132869005203247104", "0.2978630065917968384", "0.3173710107803344896"} set c to aveLargeNumber(aList) of me –AppleScriptの範囲外の精度の数値テキストの平均を計算する on aveLargeNumber(aNumList as list) –ヌル要素の削除 set bNumList to listSweep1D(aNumList) of me set aCount to count every item of bNumList set aNumStr to retDelimedText(bNumList, " + ") of me set aCMD to "echo \" scale=10; (" & aNumStr & ") / " & (aCount as string) & " \" | bc" set aRes to do shell script aCMD if aRes begins with "." then set aRes to "0" & aRes return aRes end aveLargeNumber on retDelimedText(aList as list, aDelim) set aText to "" set curDelim to AppleScript’s text item delimiters set AppleScript’s text item delimiters to aDelim set aText to aList as string set AppleScript’s text item delimiters to curDelim return aText end retDelimedText –1Dリスト項目のうち、ヌルの項目はリストから除去する on listSweep1D(aList as list) set bList to {} repeat with i in aList set j to contents of i if j is not equal to "" then set the end of bList to j end if end repeat return bList end listSweep1D |
More from my site
(Visited 31 times, 1 visits today)