Suche senden
Hochladen
SwiftでRiemann球面を扱う
•
0 gefällt mir
•
1,576 views
H
hayato iida
Folgen
Swiftに複素数を実装し、その後Riemann球面へ拡張します
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 10
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Lisp Meet Up #25, 8-bit PIC マイコン用ネイティブコンパイラの作成
Lisp Meet Up #25, 8-bit PIC マイコン用ネイティブコンパイラの作成
masayukitakagi
Lisp Meet Up #27, 8-bit PIC マイコン用ネイティブコンパイラの作成(後編)
Lisp Meet Up #27, 8-bit PIC マイコン用ネイティブコンパイラの作成(後編)
masayukitakagi
UniRx勉強会 reactive extensions inside(公開用)
UniRx勉強会 reactive extensions inside(公開用)
wilfrem
objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望)
Taketo Sano
objc2swift (自動変換の野望)
objc2swift (自動変換の野望)
Taketo Sano
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
Taketo Sano
Objective-CからSwiftへの移行講座
Objective-CからSwiftへの移行講座
teencoders
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnion
Yoshifumi Kawai
Empfohlen
Lisp Meet Up #25, 8-bit PIC マイコン用ネイティブコンパイラの作成
Lisp Meet Up #25, 8-bit PIC マイコン用ネイティブコンパイラの作成
masayukitakagi
Lisp Meet Up #27, 8-bit PIC マイコン用ネイティブコンパイラの作成(後編)
Lisp Meet Up #27, 8-bit PIC マイコン用ネイティブコンパイラの作成(後編)
masayukitakagi
UniRx勉強会 reactive extensions inside(公開用)
UniRx勉強会 reactive extensions inside(公開用)
wilfrem
objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望)
Taketo Sano
objc2swift (自動変換の野望)
objc2swift (自動変換の野望)
Taketo Sano
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
Taketo Sano
Objective-CからSwiftへの移行講座
Objective-CからSwiftへの移行講座
teencoders
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnion
Yoshifumi Kawai
ぱっと見でわかるC++11
ぱっと見でわかるC++11
えぴ 福田
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
AdvancedTechNight
GoF デザインパターン 2009
GoF デザインパターン 2009
miwarin
P5utda day3
P5utda day3
Ryuyu Ishihara
Cython ことはじめ
Cython ことはじめ
gion_XY
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)
洋史 東平
Wrapping a C++ library with Cython
Wrapping a C++ library with Cython
fuzzysphere
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
UnityTechnologiesJapan002
Lispとは何なのか - 同図像性がもたらす力とその利用法
Lispとは何なのか - 同図像性がもたらす力とその利用法
Naoya Yamashita
Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposium
Tomohiro Kumagai
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
Yoshifumi Kawai
Lisper はじめました (再)
Lisper はじめました (再)
Nobutada Matsubara
Akka Stream x Kinesis at Shinjuku reactive meetup vol2
Akka Stream x Kinesis at Shinjuku reactive meetup vol2
Masaki Toyoshima
Coqでsprintf
Coqでsprintf
Masaki Hara
Lisperはじめました
Lisperはじめました
Nobutada Matsubara
Coqでsprintf
Coqでsprintf
Masaki Hara
Agdaで回路設計(をしたい)
Agdaで回路設計(をしたい)
Shunji Nishimura
Lispの同図像性とその周辺
Lispの同図像性とその周辺
Naoya Yamashita
Visual studio 14 CTP2 概要
Visual studio 14 CTP2 概要
Yoshihisa Ozaki
Lisp講義1
Lisp講義1
stibear (stibear1996)
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-
Takahiro Kubo
[ICLR2017読み会 @ DeNA] ICLR2017紹介
[ICLR2017読み会 @ DeNA] ICLR2017紹介
Takeru Miyato
Weitere ähnliche Inhalte
Was ist angesagt?
ぱっと見でわかるC++11
ぱっと見でわかるC++11
えぴ 福田
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
AdvancedTechNight
GoF デザインパターン 2009
GoF デザインパターン 2009
miwarin
P5utda day3
P5utda day3
Ryuyu Ishihara
Cython ことはじめ
Cython ことはじめ
gion_XY
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)
洋史 東平
Wrapping a C++ library with Cython
Wrapping a C++ library with Cython
fuzzysphere
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
UnityTechnologiesJapan002
Lispとは何なのか - 同図像性がもたらす力とその利用法
Lispとは何なのか - 同図像性がもたらす力とその利用法
Naoya Yamashita
Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposium
Tomohiro Kumagai
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
Yoshifumi Kawai
Lisper はじめました (再)
Lisper はじめました (再)
Nobutada Matsubara
Akka Stream x Kinesis at Shinjuku reactive meetup vol2
Akka Stream x Kinesis at Shinjuku reactive meetup vol2
Masaki Toyoshima
Coqでsprintf
Coqでsprintf
Masaki Hara
Lisperはじめました
Lisperはじめました
Nobutada Matsubara
Coqでsprintf
Coqでsprintf
Masaki Hara
Agdaで回路設計(をしたい)
Agdaで回路設計(をしたい)
Shunji Nishimura
Lispの同図像性とその周辺
Lispの同図像性とその周辺
Naoya Yamashita
Visual studio 14 CTP2 概要
Visual studio 14 CTP2 概要
Yoshihisa Ozaki
Lisp講義1
Lisp講義1
stibear (stibear1996)
Was ist angesagt?
(20)
ぱっと見でわかるC++11
ぱっと見でわかるC++11
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
GoF デザインパターン 2009
GoF デザインパターン 2009
P5utda day3
P5utda day3
Cython ことはじめ
Cython ことはじめ
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)
Wrapping a C++ library with Cython
Wrapping a C++ library with Cython
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
Lispとは何なのか - 同図像性がもたらす力とその利用法
Lispとは何なのか - 同図像性がもたらす力とその利用法
Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposium
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
Lisper はじめました (再)
Lisper はじめました (再)
Akka Stream x Kinesis at Shinjuku reactive meetup vol2
Akka Stream x Kinesis at Shinjuku reactive meetup vol2
Coqでsprintf
Coqでsprintf
Lisperはじめました
Lisperはじめました
Coqでsprintf
Coqでsprintf
Agdaで回路設計(をしたい)
Agdaで回路設計(をしたい)
Lispの同図像性とその周辺
Lispの同図像性とその周辺
Visual studio 14 CTP2 概要
Visual studio 14 CTP2 概要
Lisp講義1
Lisp講義1
Andere mochten auch
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-
Takahiro Kubo
[ICLR2017読み会 @ DeNA] ICLR2017紹介
[ICLR2017読み会 @ DeNA] ICLR2017紹介
Takeru Miyato
医療データ解析界隈から見たICLR2017
医療データ解析界隈から見たICLR2017
RIKEN, Medical Sciences Innovation Hub Program (MIH)
170614 iclr reading-public
170614 iclr reading-public
Katsuhiko Ishiguro
Q prop
Q prop
Reiji Hatsugai
Xcode のローカライズ処方箋 #yhios
Xcode のローカライズ処方箋 #yhios
Tomohiro Kumagai
シェアリングエコノミー協会 ご入会案内
シェアリングエコノミー協会 ご入会案内
一般社団法人シェアリングエコノミー協会
シェアリングエコノミーによる持続可能型の新しい社会の実現(上田祐司)
シェアリングエコノミーによる持続可能型の新しい社会の実現(上田祐司)
一般社団法人シェアリングエコノミー協会
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
Shumpei Shiraishi
[DL輪読会]Deep Direct Reinforcement Learning for Financial Signal Representation...
[DL輪読会]Deep Direct Reinforcement Learning for Financial Signal Representation...
Deep Learning JP
Agile overview
Agile overview
Tsuyoshi Ushio
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
Hidenori Doi
エフェクト用 Shader 機能紹介
エフェクト用 Shader 機能紹介
Hajime Sanno
エフェクトにしっかり色を付ける方法
エフェクトにしっかり色を付ける方法
kmasaki
確率的プログラミングライブラリEdward
確率的プログラミングライブラリEdward
Yuta Kashino
(DL hacks輪読)Bayesian Neural Network
(DL hacks輪読)Bayesian Neural Network
Masahiro Suzuki
当たり前を当たり前に:Agile2017レポート
当たり前を当たり前に:Agile2017レポート
LINE Corporation
ICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @Dena
ICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @Dena
Takanori Nakai
ICLR読み会 奥村純 20170617
ICLR読み会 奥村純 20170617
Jun Okumura
Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会
Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会
Eiji Sekiya
Andere mochten auch
(20)
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-
[ICLR2017読み会 @ DeNA] ICLR2017紹介
[ICLR2017読み会 @ DeNA] ICLR2017紹介
医療データ解析界隈から見たICLR2017
医療データ解析界隈から見たICLR2017
170614 iclr reading-public
170614 iclr reading-public
Q prop
Q prop
Xcode のローカライズ処方箋 #yhios
Xcode のローカライズ処方箋 #yhios
シェアリングエコノミー協会 ご入会案内
シェアリングエコノミー協会 ご入会案内
シェアリングエコノミーによる持続可能型の新しい社会の実現(上田祐司)
シェアリングエコノミーによる持続可能型の新しい社会の実現(上田祐司)
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
[DL輪読会]Deep Direct Reinforcement Learning for Financial Signal Representation...
[DL輪読会]Deep Direct Reinforcement Learning for Financial Signal Representation...
Agile overview
Agile overview
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
エフェクト用 Shader 機能紹介
エフェクト用 Shader 機能紹介
エフェクトにしっかり色を付ける方法
エフェクトにしっかり色を付ける方法
確率的プログラミングライブラリEdward
確率的プログラミングライブラリEdward
(DL hacks輪読)Bayesian Neural Network
(DL hacks輪読)Bayesian Neural Network
当たり前を当たり前に:Agile2017レポート
当たり前を当たり前に:Agile2017レポート
ICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @Dena
ICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @Dena
ICLR読み会 奥村純 20170617
ICLR読み会 奥村純 20170617
Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会
Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会
Ähnlich wie SwiftでRiemann球面を扱う
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
Hisakuni Fujimoto
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
ssuser8b389c
boost - std - C#
boost - std - C#
Tatsuya Ishikawa
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
Yuichi Yoshida
第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016
kyoto university
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
Kazuaki Ishizaki
なぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuri
Yuta Okamoto
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料
Toshimichi Suekane
Cython intro prelerease
Cython intro prelerease
Shiqiao Du
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
Shiqiao Du
React Native GUIDE
React Native GUIDE
dcubeio
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
JavaScript非同期処理 入門
JavaScript非同期処理 入門
Ishibashi Ryosuke
「Lispインタープリター」勉強会 2014.12.04
「Lispインタープリター」勉強会 2014.12.04
Minoru Chikamune
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
Shogo Sensui
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
Tomoya Kawanishi
新しい並列for構文のご提案
新しい並列for構文のご提案
yohhoy
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
t-sin
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
Ähnlich wie SwiftでRiemann球面を扱う
(20)
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
boost - std - C#
boost - std - C#
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
なぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuri
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料
Cython intro prelerease
Cython intro prelerease
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
React Native GUIDE
React Native GUIDE
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
JavaScript非同期処理 入門
JavaScript非同期処理 入門
「Lispインタープリター」勉強会 2014.12.04
「Lispインタープリター」勉強会 2014.12.04
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
新しい並列for構文のご提案
新しい並列for構文のご提案
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
Kürzlich hochgeladen
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
Kürzlich hochgeladen
(8)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
SwiftでRiemann球面を扱う
1.
SpeeeKaigi資料 hayato_iida August 25,
2017 3:32 p.m. PJD飯田勇人 一応iOSエンジニア 最近はrails書いたり社内業務分析みたいな仕事 新宿のVR行きたい Swiftに複素数を実装する Riemann球面とは Riemann球面を実装する 演算子を新たに定義できる 既存型にprotocolを追加出来る 既存の演算子の処理を上書きする事もできる .swift SwiftでRiemann球面を扱う 自己紹介 導入 ちょっとした関数を計算したいときに何を使いますか? playgroundでSwiftをさくっと書きますよね? 色々値を代入したあとは複素数を代入したくなりますよ ね? Swiftには複素数がない! じゃ作ろう 目次 Swiftで数学を実装
2.
// Intの足し算を掛け算に変える protocol X
{ static func +(a: Self, b: Self) -> Self } extension Int:X{ static func +(a: Int, b: Int) -> Int { return a * b } } 10 + 10 // 100 Complex型を作る 極座標形式で実装 .swift public struct Complex { public let angle: Double // 偏角 public let radius: Double // 絶対値 } 実部、虚部 .swift public var real: Double { get { return radius * cos(angle) } } public var imaginary: Double { get { return radius * sin(angle) } } 初期化 .swift public init(angle: Double, radius: Double) { self.radius = radius self.angle = angle } public init(real: Double, imaginary: Double) { let radius = sqrt(real * real + imaginary * imaginary) let angle = atan2(imaginary, real) self.init(angle: angle, radius: radius) } .swift 複素数を実装する 複素数の定義 便利に使うAPIを追加
3.
Complex(angle: pi /
2, radius: 1) // i Complex(real: 1, imaginary: 1) // 1 + i 定数 .swift let pi = Double.pi let i = Complex(angle: pi / 2, radius: 1) 加算 減算 乗算 除算 加算 .swift extension Complex { static public func +(a: Complex, b: Complex) -> Complex { return Complex(real: a.real + b.real, imaginary: a.imaginary + b.imaginary) } } 減算 .swift extension Complex { static public func -(a: Complex, b: Complex) -> Complex { return Complex(real: a.real - b.real, imaginary: a.imaginary - b.imaginary) } } 乗算 .swift extension Complex { static public func *(a: Complex, b: Complex) -> Complex { return Complex(angle: a.angle + b.angle, radius: a.radius * b.radius) } } 除算 .swift 演算の定義 加減乗除を定義する Swift実装
4.
extension Complex { static
public func /(a: Complex, b: Complex) -> Complex { return Complex(angle: a.angle - b.angle, radius: a.radius / b.radius) } } .swift i * i // == -1 let x = Complex(angle:pi / 4, radius:1) let y = Complex(angle:-pi / 4, radius:1) x * y // == 1 .swift 1 + i 1 / i (1 + i) * (1.0 - i) 「Complex型に変換可能」なprotocol(Complexable)を定義 Int,Double,Floatにextensionで差し込む Complexable型の演算として定義しなおす Complex型同士の演算はできた 数値とComplex型の演算をしたい こうしたい 数値型と統合する 設計 クラス図 実装
5.
.swift public protocol Complexable
{ func asComplex() -> Complex } extension Int: Complexable { public func asComplex() -> Complex {return Complex(Double(self))} } extension Float: Complexable { public func asComplex() -> Complex {return Complex(Double(self))} } extension Double: Complexable { public func asComplex() -> Complex {return Complex(self)} } public struct Complex: Complexable { ・・・ public func asComplex() -> Complex { return self } } .swift public struct Complex: Complexable { ・・・ static public func +(a: Complex, b: Complexable) -> Complex { return a.asComplex() + b.asComplex() } static public func +(a: Complexabe, b: Complex) -> Complex { return a.asComplex() + b.asComplex() } } 他の演算も同様に実装する Swift2製のが多い Riemann球面にしたい .swift 1/0 // 無限大? IEEE754「浮動小数点数算術標準」 できた 既存の複素数ライブラリの課題 Riemann球面 ゼロ除算
6.
浮動小数点のゼロ除算の定義が含まれる [https://ja.wikipedia.org/wiki/ゼロ除算] より 近づける方向によって発散の方向が違う 符号付きゼロ(+0,-0)を定義 +0 正の値から近づける .swift 1/+0
// infinity -0 負の値から近づける .swift 1/-0 // - infinity 前提として実数には∞,-∞という値は含まれない IEEE754 実数に∞,-∞の2点を追加した集合をFloatにする Floatが有限であることには一旦目をつぶる (1+i) / 0 = ∞ + ∞i // ? -(1+i) / 0 = -∞ + -∞i // ? ∞か-∞か 実数上での理解 複素数のゼロ除算をどう定義するか? 無限に存在する?
7.
8.
Rなら2点{∞,-∞}足せば済んだ 無限に点を追加する? しかも不可算無限個ある ∞を無限遠点として ただしこの無限遠点はRの時の∞ではないことに注意 Riemann球面 無限遠点の演算
9.
すでにCの演算は実装済み 上記の無限遠点にまつわる演算を実装すればリーマン球面を実装したと言える TDDで実装する .swift let inf =
Complex.infinity let nan = Complex.nan assert(inf != nan) assert(inf == inf) assert(inf != z) assert(inf + z == inf) assert(z + inf == inf) assert(0 + inf == inf + 0) assert(0 + inf == inf) assert((inf + inf).isNan) assert(inf - z == inf) assert(z - inf == inf) assert(0 - inf == inf - 0) assert(0 - inf == inf) assert((inf - inf).isNan) assert(z * inf == inf * z) assert(z * inf == inf) assert((0 * inf).isNan) assert((inf * 0).isNan) assert(inf * inf == inf) assert(i / 0 == inf) assert(z / 0 == inf) assert(1 / inf == 0) assert(0 / z == 0) assert((inf / inf).isNan) .swift extension Complex { static public let infinity = Complex(angle: Double.nan, radius: Double.infinit y) static public let nan = Complex(angle: Double.nan, radius: Double.nan) static public func +(a: Complex, b: Complex) -> Complex { if a.isInfinite && b.isInfinite { return Complex.nan } else if a.isInfinite || b.isInfinite { return Complex.infinity } else if a.isNan || b.isNan { return Complex.nan } return Complex(real: a.asComplex().real + b.asComplex().real, imaginary: a.a sComplex().imaginary + b.asComplex().imaginary) } } 他の演算子にも同様に実装して 実装 実装 実装 Swiftのライブラリにしました
10.
github:SwiftRiemannSphere playgroundも同梱しているのでデモはそちらで 複素数をリーマン球面上の演算として扱いたい ただし実装としては計算に追加処理がかかるので計算機としては非効率 必要な範囲で選択的にリーマン球面を扱えるようにしたい ライブラリ化することで import したコードにだけ適用出来る Swift4対応で書いているので今後のSwiftの仕様変更にも強い 数学の定義をそのまま実装したので応用数学でも有効に使えるはず 総括
Jetzt herunterladen