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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
610
[#JSUG] SmartNews における container friendly な Spring Boot アプリケーション開発
komiya_atsushi
1
11k
Java のデータ圧縮ライブラリを極める #jjug_ccc #ccc_c7
komiya_atsushi
4
5.4k
#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.4k
Other Decks in Programming
See All in Programming
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
410
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
220
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
2.9k
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
230
App Intentsのビルドプロセスを支える技術
kntkymt
0
410
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
150
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
5
3.8k
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
530
速習iPhone Duo対応
yuukiw00w
1
700
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
130
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
640
cdk deploy JawsSonic #MARATHONしながらAWSリソースをデプロイしてみよう
akihisaikeda
2
140
Featured
See All Featured
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.1k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
550
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Everyday Curiosity
cassininazir
0
320
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
760
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
580
The SEO Collaboration Effect
kristinabergwall1
1
570
Rails Girls Zürich Keynote
gr2m
96
14k
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!