Soumettre la recherche
Mettre en ligne
SwiftでRiemann球面を扱う
•
0 j'aime
•
1,576 vues
H
hayato iida
Suivre
Swiftに複素数を実装し、その後Riemann球面へ拡張します
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 10
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
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
Recommandé
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
Contenu connexe
Tendances
ぱっと見でわかる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)
Tendances
(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
En vedette
言葉のもつ広がりを、モデルの学習に活かそう -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
En vedette
(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読み会
Similaire à 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
Similaire à 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
Dernier
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
Dernier
(9)
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
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の仕様変更にも強い 数学の定義をそのまま実装したので応用数学でも有効に使えるはず 総括
Télécharger maintenant