Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
#渋谷java : Java の数学関数を計算速度的に極めたい
Search
KOMIYA Atsushi
April 23, 2016
Programming
1.5k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
#渋谷java : Java の数学関数を計算速度的に極めたい
第十五回 #渋谷java
http://shibuya-java.connpass.com/event/29113/
での発表資料です。
KOMIYA Atsushi
April 23, 2016
More Decks by KOMIYA Atsushi
See All by KOMIYA Atsushi
#JJUG Java における乱数生成器とのつき合い方
komiya_atsushi
5
5.6k
#JJUG Fork/Join フレームワークを効率的に正しく使いたい
komiya_atsushi
0
620
[#JSUG] SmartNews における container friendly な Spring Boot アプリケーション開発
komiya_atsushi
1
11k
Java のデータ圧縮ライブラリを極める #jjug_ccc #ccc_c7
komiya_atsushi
4
5.5k
#devsumi 自然言語処理・機械学習によるファクトチェック業務の支援
komiya_atsushi
1
4.9k
SmartNews Ads における機械学習の活用とその運用 #mlops
komiya_atsushi
3
21k
GBDT によるクリック率予測を高速化したい #オレシカナイト vol.4
komiya_atsushi
5
1.4k
Maven central repository の artifact をランキングする #渋谷java
komiya_atsushi
0
1.6k
確率的データ構造を Java で扱いたい! #JJUG
komiya_atsushi
6
2.5k
Other Decks in Programming
See All in Programming
No More NoSuchMethodError
exoego
1
120
AI駆動開発4年目の現在地(『あなたはFDEになるべきか?』イベント資料)
kumaiu
0
110
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
250
学びを記事・スライド・Xへ高速展開する― AI-assisted Learning Loopで回すコンテンツ生成術
ochtum
0
180
Enforcing Your Architecture with Unit Tests in the AI Era (Swift Connection X)
steliosf
PRO
1
110
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
200
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
400
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
14
11k
8年前のNode.jsを動かして分かった、npm installの裏側
keisukeikeda
0
110
Groovy as a human and AI friendly programming language
paulk
0
150
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
220
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
1.6k
Featured
See All Featured
Ethics towards AI in product and experience design
skipperchong
2
450
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
620
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
290
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
570
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
Chasing Engaging Ingredients in Design
codingconduct
0
380
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Designing for humans not robots
tammielis
254
26k
Automating Front-end Workflow
addyosmani
1370
210k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Transcript
Java ͷֶؔΛ ܭࢉతʹۃΊ͍ͨ ौ୩ Java 15th, 2016-04-23 KOMIYA Atsushi
͓·͑ͩΕΑ
KOMIYA Atsushi @komiya_atsushi
None
Spark ຊΛॻ͖·ͨ͠ͷͰ ΑΖ͚͠Εͥͻ͝ߪೖ͍ͩ͘͞ʂ
ࠓͷτϐοΫ
Java ͷֶؔ
java.lang.Math ͔Β࢝Ίͯ Java ͷֶؔͷܭࢉΛ ٻ͍͖ͯ͠·͢
Implementations of Math functions in JDK
java.lang.Math & java.lang.StrictMath
JDK ඪ४ͷֶؔ • ֶؔͷ࣮ͱͯ͠ java.lang.Math ͱ java.lang.StrictMath ͕ఏڙ͞Ε͍ͯΔ • ͦΕͧΕԿ͕ҧ͏ͷ͔ʁ
java.lang.StrictMath • https://docs.oracle.com/javase/jp/8/docs/api/java/lang/ StrictMath.html ΑΓ • ʮJavaϓϩάϥϜͷҠ২ੑΛอͭͨΊʹɺ͜ͷύοέʔδʹ͋ΔҰ ෦ͷؔͷఆٛɺطଘͷΞϧΰϦζϜͱಉҰͷܭࢉ݁ՌΛग़ ͢͜ͱ͕ٻΊΒΕ͍ͯ·͢ɻ͜͏ͨ͠ΞϧΰϦζϜɺ༗໊ͳωο τϫʔΫɾϥΠϒϥϦͰ͋Δnetlib͔ΒʮFreely
Distributable Math Libraryʯ(fdlibm)ύοέʔδͱͯ͠ೖखՄೳͰ͢ɻ͜ΕΒͷΞϧΰ ϦζϜCݴޠͰهड़͞Ε͓ͯΓɺͯ͢ͷුಈখԋࢉ͕Java ͷුಈখԋࢉϧʔϧʹै࣮ͬͯߦ͞ΕΔͷͱݟͳ͞Ε· ͢ɻʯ
java.lang.StrictMath • ҟͳΔϓϥοτϑΥʔϜ (OS, CPU ͳͲ) ʹ ͓͍ͯɺϏοτύλʔϯͷϨϕϧͰಉ݁͡Ռ ͕ฦ͞ΕΔ͜ͱ (࠶ݱੑ)
͕อূ͞Ε͍ͯΔ • ੑೳೋͷ࣍
java.lang.Math • https://docs.oracle.com/javase/jp/8/docs/api/ java/lang/Math.html ΑΓ • ʮStrictMathΫϥεͷҰ෦ͷϝιουͱҟͳ ΓɺMathΫϥεͷՁؔͷͯ͢ͷ࣮ɺ ϏοτରϏοτͷಉ݁͡ՌΛฦ͢Α͏ʹఆٛ͞Ε ͍ͯ·ͤΜɻ͜ͷΏΔ͔͞ʹΑͬͯɺݫີͳ࠶ݱ
ੑ͕ཁٻ͞Εͳ͍࣮ʹ͓͍ͯύϑΥʔϚϯεͷ ্͕ՄೳʹͳΓ·͢ɻʯ
java.lang.Math • CPU ʹґଘ໋ͨ͠ྩͳͲར༻͠ͳ͕Βɺ ΑΓΑ͍ੑೳΛఏڙ͢Δ • ͨͩ͠ʮਖ਼֬͞ʯΛ٘ਜ਼ʹ͢ΔΘ͚Ͱͳ͍ • ࣮༷తʹʮਖ਼֬͞ʯʮ୯ௐੑʯ͕ཁٻ ͞Ε͍ͯΔ
Alternatives of java.lang.Math
commons-math3 org.apache.commons:commons-math3:3.6.1
commons-math3 • FastMath Ϋϥε͕ఏڙ͞Ε͍ͯΔ • java.lang.Math ͱಉ͡ϝιουߏ • ΑΓ͘ɺ͔ͭਫ਼͕ߴ͍͜ͱΛᨳ͍ͬͯΔ •
JIT ʹΑΔ࠷దԽΛલఏͱ͠ɺ·ͨେ͖Ίͷ ϧοΫΞοϓςʔϒϧΛར༻ͯ͠ߴԽΛਤͬ ͍ͯΔ
jafama net.jafama:jafama:2.1.0
jafama • ͪ͜Β FastMath Ϋϥε͕ఏڙ͞Ε͍ͯΔ • 1e-15 (0.000000000000001) ͷਫ਼Β͍͠ •
JIT ʹΑΔ࠷దԽΛલఏͱ͍ͯ͠Δ • ਫ਼Λ٘ਜ਼ʹͨ͠ɺֶؔͷߴ࣮ఏڙ͞ Ε͍ͯΔ • xxxQuick() ͷΑ͏ʹɺ”Quick” ͷαϑΟοΫε͕ ͍͍ͯΔ
Comparison: performance
ܭࢉͷൺֱ • java.lang.Math ͱ commons-math3, jafama ͱΛൺֱ͢Δ • jmh ͰεϧʔϓοτΛܭଌ͢Δ
• ࣍ͷֶؔͦΕͧΕʹ͍ͭͯܭଌ͢Δ • log, log1p, exp, tanh, pow, sqrt • ػցֶशͷ࣮ʹͯΑ͘ར༻͢Δؔ܈Ͱ͢ • ֶؔʹɺεέʔϧͷҟͳΔҾΛෳ༻ҙ͢Δ • ಛఆͷ (۠ؒ) ʹରԠͨ͠࠷దԽ࣮͕͞Ε͍ͯΔ߹ ͕͋ΔͨΊ
ϕϯνϚʔΫϓϩάϥϜ https://github.com/komiya-atsushi/ java-playground/tree/master/math- functions
log
log • commons-math3 ͕಄ͻͱͭൈ͖Μग़͍ͯΔ • 1.234 ͷҾΛ༩͑ͨͱ͖ͷੑೳ͕ҟৗత ʹඈͼൈ͚͍ͯΔ͚Ͳɺ͜ΕΘΓͱී௨ Ͱ͢ •
jafama ͱ jdk ΄΅ಉ͡ੑೳ
log1p
log1p • log ͱҟͳΓɺjafama ͕ѹతʹΑ͍ • jdk ͱ commons-math3 େࠩͳ͍͕ɺ
jdk > commons-math3 Ͱ͋Δ • commons-math3 ͷ log ͷ݁ՌԿͩͬͨ ͷ͔…
exp
exp • commons-math3, jafama ͱʹɺҾ͕େ͖ ͘ͳΔʹͭΕͯੑೳ͕ߴ·Δ • ಛʹ jafama શൠతʹੑೳ͕Α͍
• ҰํͰ jdk …
tanh
tanh • ͍ͣΕͷ࣮ɺҾͷεέʔϧ͕େ͖͘ͳ Δͱɺੑೳ͕Α͘ͳΔ • jafama > commons-math3 > jdk
sqrt
sqrt • େࠩͳ͍ • ͲΕΛͬͯ΄ͱΜͲಉ͡
pow
pow • jafama ϐʔΩʔͰ͋Δ͕ɺશମతʹ༏Ε͍ͯ Δ • jdk ϐʔΩʔա͗Δ • power
͕খ͍͞߹ commons-math3 ΑΓ Α͍ੑೳͰ͋Δ • commons-math3 ຌ༱
Comparison: accuracy
ܭࢉਫ਼ͷൺֱ • java.lang.StrictMath ʹ͓͚Δ࣮ͷΓͱൺֱ͢Δ • (StrictMath ͷ͕ਖ਼͍͠Θ͚Ͱͳ͍ͷ͕ͩ…) • Γಉ࢜ͷࠩʹର͠ɺStrictMath ଆͷΓΛ
ͱׂͯ͠߹Λܭࢉ͢Δ • ͦͷׂ߹ͷฏۉઈରͱ࠷େͰਫ਼ΛݟͯΈΔ • Ҿͷݻఆͤͣɺཚੜͨ͠ͷΛ༩͑Δ
Result: average DPNNPOTNBUI KBGBNB MPH & & MPHQ & &
FYQ & & UBOI & & TRSU & &
Result: maximum DPNNPOTNBUI KBGBNB MPH & & MPHQ & &
FYQ & & UBOI & & TRSU & &
Result • ͍ͣΕʹ͓͍ͯɺେ͖ͳࠩҟ͕͋ΔΘ͚Ͱ ͳ͍ • 1e-15 ͷਫ਼อূͰ͖ͦ͏ • jafama ʹ͍ͭͯɺStrictMath
ͷΓͱҟ ͳΔ͜ͱ͕ଟ͍ʹ͋Γͦ͏
Conclusion
·ͱΊ • ʮۜͷؙଘࡏ͠ͳ͔ͬͨʯ • “FastMath” ͱ໊͍ͬͯͯɺͯ͢ͷֶؔ ͷ࣮ʹ͓͍ͯ JDK ͷ࣮ΑΓ༏Ε͍ͯΔɺͱ ͍͏Θ͚Ͱͳ͍
• ·ͨɺֶؔʹ༩͑ΔҾ࣍ୈͰੑೳ͕େ͖͘ҟΔ ͜ͱ͋Γ͏Δ • ϢʔεέʔεʹԠͯ͡ɺ֤छ࣮Λ͍͚Δ͜ͱ͕ ඞཁ
Thank you!