Enviar búsqueda
Cargar
Swift で数学のススメ 〜 プログラミングと数学は同時に学べ
•
389 recomendaciones
•
29,385 vistas
Taketo Sano
Seguir
iOSDC 2017
Leer menos
Leer más
Educación
Denunciar
Compartir
Denunciar
Compartir
1 de 42
Descargar ahora
Descargar para leer sin conexión
Recomendados
サイバージェント 秋葉原ラボのHBase 活用事例
サイバージェント 秋葉原ラボのHBase 活用事例
cyberagent
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
C# コーディングガイドライン 2013/02/26
C# コーディングガイドライン 2013/02/26
Yoshihisa Ozaki
Boostのあるプログラミング生活
Boostのあるプログラミング生活
Akira Takahashi
Recomendados
サイバージェント 秋葉原ラボのHBase 活用事例
サイバージェント 秋葉原ラボのHBase 活用事例
cyberagent
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
C# コーディングガイドライン 2013/02/26
C# コーディングガイドライン 2013/02/26
Yoshihisa Ozaki
Boostのあるプログラミング生活
Boostのあるプログラミング生活
Akira Takahashi
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
Understanding Akka Streams, Back Pressure, and Asynchronous Architectures
Understanding Akka Streams, Back Pressure, and Asynchronous Architectures
Lightbend
templateとautoの型推論
templateとautoの型推論
MITSUNARI Shigeo
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
digitalghost
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
Yuki Tamura
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
Takeru Maehara
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
Yoshifumi Kawai
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)
Yuki Tamura
充足可能性問題のいろいろ
充足可能性問題のいろいろ
Hiroshi Yamashita
PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5
Uptime Technologies LLC (JP)
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
Takashi Hoshino
すごいConstたのしく使おう!
すごいConstたのしく使おう!
Akihiro Nishimura
クロージャデザインパターン
クロージャデザインパターン
Moriharu Ohzu
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
Fixstars Corporation
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
Tadahiro Ishisaka
Emcjp item21
Emcjp item21
MITSUNARI Shigeo
Folding Unfolded - Polyglot FP for Fun and Profit - Haskell and Scala - with ...
Folding Unfolded - Polyglot FP for Fun and Profit - Haskell and Scala - with ...
Philip Schwarz
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
Cocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magic
Badoo Development
Александр Зимин (Alexander Zimin) — Магия Swift
Александр Зимин (Alexander Zimin) — Магия Swift
CocoaHeads
Más contenido relacionado
La actualidad más candente
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
Understanding Akka Streams, Back Pressure, and Asynchronous Architectures
Understanding Akka Streams, Back Pressure, and Asynchronous Architectures
Lightbend
templateとautoの型推論
templateとautoの型推論
MITSUNARI Shigeo
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
digitalghost
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
Yuki Tamura
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
Takeru Maehara
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
Yoshifumi Kawai
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)
Yuki Tamura
充足可能性問題のいろいろ
充足可能性問題のいろいろ
Hiroshi Yamashita
PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5
Uptime Technologies LLC (JP)
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
Takashi Hoshino
すごいConstたのしく使おう!
すごいConstたのしく使おう!
Akihiro Nishimura
クロージャデザインパターン
クロージャデザインパターン
Moriharu Ohzu
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
Fixstars Corporation
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
Tadahiro Ishisaka
Emcjp item21
Emcjp item21
MITSUNARI Shigeo
Folding Unfolded - Polyglot FP for Fun and Profit - Haskell and Scala - with ...
Folding Unfolded - Polyglot FP for Fun and Profit - Haskell and Scala - with ...
Philip Schwarz
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
La actualidad más candente
(20)
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Understanding Akka Streams, Back Pressure, and Asynchronous Architectures
Understanding Akka Streams, Back Pressure, and Asynchronous Architectures
templateとautoの型推論
templateとautoの型推論
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)
充足可能性問題のいろいろ
充足可能性問題のいろいろ
PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
すごいConstたのしく使おう!
すごいConstたのしく使おう!
クロージャデザインパターン
クロージャデザインパターン
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
Emcjp item21
Emcjp item21
Folding Unfolded - Polyglot FP for Fun and Profit - Haskell and Scala - with ...
Folding Unfolded - Polyglot FP for Fun and Profit - Haskell and Scala - with ...
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Similar a Swift で数学のススメ 〜 プログラミングと数学は同時に学べ
Cocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magic
Badoo Development
Александр Зимин (Alexander Zimin) — Магия Swift
Александр Зимин (Alexander Zimin) — Магия Swift
CocoaHeads
oop objects_classes
oop objects_classes
sidra tauseef
Functional Programming In Java
Functional Programming In Java
Andrei Solntsev
function in c
function in c
subam3
functions
functions
Makwana Bhavesh
Hive Functions Cheat Sheet
Hive Functions Cheat Sheet
Hortonworks
Wien15 java8
Wien15 java8
Jaanus Pöial
Inheritance compiler support
Inheritance compiler support
Syed Zaid Irshad
All Aboard The Scala-to-PureScript Express!
All Aboard The Scala-to-PureScript Express!
John De Goes
Mastering Kotlin Standard Library
Mastering Kotlin Standard Library
Nelson Glauber Leal
Un dsl pour ma base de données
Un dsl pour ma base de données
Romain Lecomte
documents.pub_new-features-in-java-8-it-jpoialjavanaitedwien15java8pdf-java-8...
documents.pub_new-features-in-java-8-it-jpoialjavanaitedwien15java8pdf-java-8...
Akaks
Lego: A brick system build by scala
Lego: A brick system build by scala
lunfu zhong
Oop objects_classes
Oop objects_classes
sidra tauseef
Kotlin For Android - Functions (part 3 of 7)
Kotlin For Android - Functions (part 3 of 7)
Gesh Markov
Virtual function in C++ Pure Virtual Function
Virtual function in C++ Pure Virtual Function
Kamlesh Makvana
Делаем пользовательское Api на базе Shapeless
Делаем пользовательское Api на базе Shapeless
Вадим Челышов
TI1220 Lecture 6: First-class Functions
TI1220 Lecture 6: First-class Functions
Eelco Visser
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
Ruslan Shevchenko
Similar a Swift で数学のススメ 〜 プログラミングと数学は同時に学べ
(20)
Cocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magic
Александр Зимин (Alexander Zimin) — Магия Swift
Александр Зимин (Alexander Zimin) — Магия Swift
oop objects_classes
oop objects_classes
Functional Programming In Java
Functional Programming In Java
function in c
function in c
functions
functions
Hive Functions Cheat Sheet
Hive Functions Cheat Sheet
Wien15 java8
Wien15 java8
Inheritance compiler support
Inheritance compiler support
All Aboard The Scala-to-PureScript Express!
All Aboard The Scala-to-PureScript Express!
Mastering Kotlin Standard Library
Mastering Kotlin Standard Library
Un dsl pour ma base de données
Un dsl pour ma base de données
documents.pub_new-features-in-java-8-it-jpoialjavanaitedwien15java8pdf-java-8...
documents.pub_new-features-in-java-8-it-jpoialjavanaitedwien15java8pdf-java-8...
Lego: A brick system build by scala
Lego: A brick system build by scala
Oop objects_classes
Oop objects_classes
Kotlin For Android - Functions (part 3 of 7)
Kotlin For Android - Functions (part 3 of 7)
Virtual function in C++ Pure Virtual Function
Virtual function in C++ Pure Virtual Function
Делаем пользовательское Api на базе Shapeless
Делаем пользовательское Api на базе Shapeless
TI1220 Lecture 6: First-class Functions
TI1220 Lecture 6: First-class Functions
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
Más de Taketo Sano
Divisibility of Lee’s class and its relation with Rasmussen’s invariant / 201...
Divisibility of Lee’s class and its relation with Rasmussen’s invariant / 201...
Taketo Sano
トポロジーと圏論の夜明け
トポロジーと圏論の夜明け
Taketo Sano
Swift で数学研究のススメ
Swift で数学研究のススメ
Taketo Sano
(意欲的な中高生のための)トポロジー・圏論・コンピュータ
(意欲的な中高生のための)トポロジー・圏論・コンピュータ
Taketo Sano
特性類の気持ち
特性類の気持ち
Taketo Sano
山手線は丸いのか?プログラマのためのトポロジー入門
山手線は丸いのか?プログラマのためのトポロジー入門
Taketo Sano
何もないところから数を作る
何もないところから数を作る
Taketo Sano
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
Taketo Sano
情報幾何学 #2.4
情報幾何学 #2.4
Taketo Sano
情報幾何学 #2 #infogeo16
情報幾何学 #2 #infogeo16
Taketo Sano
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
Taketo Sano
何もないところから数を作る
何もないところから数を作る
Taketo Sano
objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望)
Taketo Sano
さらに上を目指すための iOS アプリ設計
さらに上を目指すための iOS アプリ設計
Taketo Sano
基底変換、固有値・固有ベクトル、そしてその先
基底変換、固有値・固有ベクトル、そしてその先
Taketo Sano
objc2swift (自動変換の野望)
objc2swift (自動変換の野望)
Taketo Sano
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
Taketo Sano
2015 02-18 xxx-literalconvertible
2015 02-18 xxx-literalconvertible
Taketo Sano
let UIWebView as WKWebView
let UIWebView as WKWebView
Taketo Sano
プログラマのための線形代数再入門
プログラマのための線形代数再入門
Taketo Sano
Más de Taketo Sano
(20)
Divisibility of Lee’s class and its relation with Rasmussen’s invariant / 201...
Divisibility of Lee’s class and its relation with Rasmussen’s invariant / 201...
トポロジーと圏論の夜明け
トポロジーと圏論の夜明け
Swift で数学研究のススメ
Swift で数学研究のススメ
(意欲的な中高生のための)トポロジー・圏論・コンピュータ
(意欲的な中高生のための)トポロジー・圏論・コンピュータ
特性類の気持ち
特性類の気持ち
山手線は丸いのか?プログラマのためのトポロジー入門
山手線は丸いのか?プログラマのためのトポロジー入門
何もないところから数を作る
何もないところから数を作る
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
情報幾何学 #2.4
情報幾何学 #2.4
情報幾何学 #2 #infogeo16
情報幾何学 #2 #infogeo16
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
何もないところから数を作る
何もないところから数を作る
objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望)
さらに上を目指すための iOS アプリ設計
さらに上を目指すための iOS アプリ設計
基底変換、固有値・固有ベクトル、そしてその先
基底変換、固有値・固有ベクトル、そしてその先
objc2swift (自動変換の野望)
objc2swift (自動変換の野望)
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
2015 02-18 xxx-literalconvertible
2015 02-18 xxx-literalconvertible
let UIWebView as WKWebView
let UIWebView as WKWebView
プログラマのための線形代数再入門
プログラマのための線形代数再入門
Último
Gardella_PRCampaignConclusion Pitch Letter
Gardella_PRCampaignConclusion Pitch Letter
MateoGardella
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
Denish Jangid
Making and Justifying Mathematical Decisions.pdf
Making and Justifying Mathematical Decisions.pdf
Chris Hunter
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
GeoBlogs
Ecological Succession. ( ECOSYSTEM, B. Pharmacy, 1st Year, Sem-II, Environmen...
Ecological Succession. ( ECOSYSTEM, B. Pharmacy, 1st Year, Sem-II, Environmen...
Shubhangi Sonawane
PROCESS RECORDING FORMAT.docx
PROCESS RECORDING FORMAT.docx
PoojaSen20
Z Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot Graph
Thiyagu K
Gardella_Mateo_IntellectualProperty.pdf.
Gardella_Mateo_IntellectualProperty.pdf.
MateoGardella
Unit-IV; Professional Sales Representative (PSR).pptx
Unit-IV; Professional Sales Representative (PSR).pptx
VishalSingh1417
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
QucHHunhnh
psychiatric nursing HISTORY COLLECTION .docx
psychiatric nursing HISTORY COLLECTION .docx
PoojaSen20
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global Impact
PECB
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17
Celine George
Application orientated numerical on hev.ppt
Application orientated numerical on hev.ppt
RamjanShidvankar
This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.
christianmathematics
An Overview of Mutual Funds Bcom Project.pdf
An Overview of Mutual Funds Bcom Project.pdf
SanaAli374401
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
National Information Standards Organization (NISO)
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdf
agholdier
Advance Mobile Application Development class 07
Advance Mobile Application Development class 07
Dr. Mazin Mohamed alkathiri
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
Jayanti Pande
Último
(20)
Gardella_PRCampaignConclusion Pitch Letter
Gardella_PRCampaignConclusion Pitch Letter
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
Making and Justifying Mathematical Decisions.pdf
Making and Justifying Mathematical Decisions.pdf
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
Ecological Succession. ( ECOSYSTEM, B. Pharmacy, 1st Year, Sem-II, Environmen...
Ecological Succession. ( ECOSYSTEM, B. Pharmacy, 1st Year, Sem-II, Environmen...
PROCESS RECORDING FORMAT.docx
PROCESS RECORDING FORMAT.docx
Z Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot Graph
Gardella_Mateo_IntellectualProperty.pdf.
Gardella_Mateo_IntellectualProperty.pdf.
Unit-IV; Professional Sales Representative (PSR).pptx
Unit-IV; Professional Sales Representative (PSR).pptx
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
psychiatric nursing HISTORY COLLECTION .docx
psychiatric nursing HISTORY COLLECTION .docx
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global Impact
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17
Application orientated numerical on hev.ppt
Application orientated numerical on hev.ppt
This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.
An Overview of Mutual Funds Bcom Project.pdf
An Overview of Mutual Funds Bcom Project.pdf
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdf
Advance Mobile Application Development class 07
Advance Mobile Application Development class 07
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
Swift で数学のススメ 〜 プログラミングと数学は同時に学べ
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
protocol AdditiveGroup {
// static var zero: Self { get } // static func + (a: Self, b: Self) -> Self // prefix static func - (x: Self) -> Self // } extension AdditiveGroup { static func -(a: Self, b: Self) -> Self { return (a + (-b)) // } }
18.
protocol AdditiveGroup {
// … } protocol Ring: AdditiveGroup { // static var identity: Self { get } // 1 static func * (a: Self, b: Self) -> Self // var inverse: Self? { get } // (optional) }
19.
protocol AdditiveGroup {
// … } protocol Ring: AdditiveGroup { // … } protocol Field: Ring {} // extension Field { static func / (a: Self, b: Self) -> Self { // return a * b.inverse! // 0 } }
20.
extension Int: Ring
{ // Int static var zero: Int { return 0 } static var identity: Int { return 1 } } // Int
21.
struct Rational: Field
{ // private let p, q: Int init(_ p: Int, _ q: Int) { (self.p, self.q) = (p, q) } static var zero: Int { return Rational(0, 1) } static var identity: Int { return Rational(1, 1) } var inverse: Rational? { // return (p != 0) ? Rational(q, p) : nil } …
22.
struct Rational: Field
{ … static func + (a: Rational, b: Rational) -> Rational { return Rational(a.p * b.q + a.q * b.p, a.q * b.q) } static prefix func - (a: Rational) -> Rational { return Rational(-a.p, a.q) } static func * (a: Rational, b: Rational) -> Rational { return Rational(a.p * b.p, a.q * b.q) } }
23.
24.
25.
26.
27.
protocol EuclideanRing: Ring
{ // static func eucDiv(_ a: Self, _ b: Self) -> (q: Self, r: Self) // } extension EuclideanRing { static func % (_ a: Self, b: Self) -> Self { // return Self.eucDiv(a, b).r } }
28.
extension Int: EuclideanRing
{ // Int EuclideanRing static func eucDiv(_ a: Int, _ b: Int) -> (q: Int, r: Int) { // let q = a / b return (q: q, r: a - q * b) } }
29.
struct Polynomial<K: Field>:
EuclideanRing { public let coeffs: [K] public init(_ coeffs: K...) { self.coeffs = coeffs } public static func + (f: Polynomial<K>, g: Polynomial<K>) -> Polynomial<K> { return Polynomial<K>(degree: max(f.degree, g.degree)) { f.coeff($0) + g.coeff($0) } } public static prefix func - (f: Polynomial<K>) -> Polynomial<K> { return f.map { -$0 } } public static func * (f: Polynomial<K>, g: Polynomial<K>) -> Polynomial<K> { … } …
30.
struct Polynomial<K: Field>:
EuclideanRing { … static func eucDiv<K: Field>(_ f: Polynomial<K>, _ g: Polynomial<K>) -> (q: Polynomial<K>, r: Polynomial<K>) { return (0 ... max(0, f.degree - g.degree)) .reversed() .reduce( (0, f) ) { (result: (Polynomial<K>, Polynomial<K>), degree: Int) in let (q, r) = result let m = eucDivMonomial(r, g) return (q + m.q, m.r) } } }
31.
public func gcd<R:
EuclideanRing>(_ a: R, _ b: R) -> R { switch b { case 0: return a default: return gcd(b, a % b) } }
32.
33.
34.
let a =
sqrt(2.0) // 1.41421356… a * a == 2.0 // false
Descargar ahora