SlideShare a Scribd company logo
なぜFortranの文字列と文字型配列を
混同してしまうのか
出川智啓(モダンFortran勉強会)
文字列と文字の配列の混同
 企業のFORTRAN資産で見られるレガシーコードの代表例
 文字列を文字の配列として処理している
 関数に渡した文字列を文字の配列として受け取っている
 仮引数の配列要素数を決め打ちしており,柔軟性がない
 なぜ文字列と文字の配列を混同・誤用してしまうのか?
 個人のスキルの問題2割,Fortranの問題8割くらい
2019/5/4モダンFortran勉強会.f012
内容
 Fortranの文字型配列
 Fortranの文字列
 文字型配列・文字列を受け取る関数の仮引数
 まとめ
2019/5/4モダンFortran勉強会.f013
型宣言
 文字の配列


 属性で指定することもできる
 文字列


 UNICODEが扱える処理系では,1文字あたりのByte数を指定可能
 標準は1Byteで,4Byteを選べるのは今のところgfortranのみ
character :: charArray(要素数)
character,dimension(要素数) :: charArray
character(文字列長) :: str
character(len=文字列長,kind={1,4}) :: str
2019/5/4モダンFortran勉強会.f014
文字の配列
 型がcharacterの配列
 Fortranの配列操作の機能が利用できる
 charArray(:)で全要素を一括参照
 size関数で文字列の長さがわかる
print *,charArray(:) !test.dat
print *,size(charArray) !8
2019/5/4モダンFortran勉強会.f015
文字の配列
 型がcharacterの配列
 Fortranの配列操作の機能が利用できる
 charArray(i)でi文字目を参照
 charArray(i:j)でi文字目からj文字目までのサブ配列を
参照
 charArray(終端:1:-1)で要素を反転
print *,charArray(6) !d
print *,charArray(3:7) !st.da
print *,charArray(8:1:-1) !tad.tset
2019/5/4モダンFortran勉強会.f016
文字の配列の長所
 elementalな関数に配列ごと渡して一括で処理できる

 iachar() 文字のASCIIコードを取得する関数
 achar() ASCIIコードから対応するASCII文字を取得する関数
 配列中の小文字をまとめて大文字に変換する
 演算はできないが比較はできる
print *,iachar(charArray)
!116 101 115 116 46 100 97 116
where('a' <= charArray .and. charArray <= 'z')&
charArray = achar(iachar(charArray) &
+ (iachar('A')-iachar('a')))
print *,charArray !TEST.DAT
2019/5/4モダンFortran勉強会.f017
文字の配列の長所
 再自動割付ができる

 代入時に右辺の配列要素数に応じて勝手に割付
 一度割り付けられた配列でも,代入時に自動で再割付
character,allocatable :: charArray(:)
print *,size(charArray) !0
character,allocatable :: charArray(:)
charArray = ["F","o","r","t","r","a","n"]
print *,charArray,size(charArray) !Fortran 7
charArray = ["C","/","C","+","+"]
print *,charArray,size(charArray) !C/C++ 5
charArray(:) = ["J","a","v","a"] !(:)を書くと再割付を抑制
print *,charArray,size(charArray) !Java+ 5
2019/5/4モダンFortran勉強会.f018
文字の配列の短所
 代入がやりにくい
 文字列ではなく,あくまで配列
 1文字ずつ代入するか,配列構成子を使う

 文字列としては使えない
charArray = ["F","o","r","t","r","a","n"]
character,allocatable :: charArray(:)
charArray = ["F","o","r","t","r","a","n"]
print *,charArray,size(charArray) !Fortran 7
charArray = "C/C++" !文字列C/C++を代入
print *,charArray,size(charArray) !CCCCCCC 7
2019/5/4モダンFortran勉強会.f019
文字列の長所
 文字の配列ではなく,文字列として取り扱える
 代入が簡単
 代入する文字列より文字列長が長ければ末尾にスペース,
足りなければ文字列長で打ち切り


character(3) :: str = "Fortran"
print *,str !For
character(10) :: str = "Fortran"
print *,str !Fortran˽˽˽
2019/5/4モダンFortran勉強会.f0110
文字列の長所
 再自動割付ができる
 定数の宣言が簡単

character(:),allocatable :: str
str = "Fortran"
print *,str !Fortran
str = "C/C++"
print *,str !C/C++
character(*),parameter :: str = "Fortran"
2019/5/4モダンFortran勉強会.f0111
文字列の長所
 文字列専用の処理が色々使える
 文字列の長さの取得
 len(str)
 文字列の結合
 str1//str2
 空白の移動や除去
 trim(str) 右端の空白を除去
 adjustl(str) 文字列を左に寄せる(先頭の空白を末尾に詰める)
 adjustr(str) 文字列を右に寄せる(末尾の空白を先頭に詰める)
2019/5/4モダンFortran勉強会.f0112
文字列の長所
 文字列専用の処理が色々使える
 文字列の検索
 index(str,word) strからwordを検索する
 scan(str,charGrp) strからcharGrpに含まれる文字のいず
れかを検索する
 verify(str,charGrp) strからcharGrpに含まれない文字を
検索する
 文字列の大小比較
 lgt(str1,str2) str1の文字コードがstr2より大きいかを判定
 lge(str1,str2) str1の文字コードがstr2以上かを判定
 llt(str1,str2) str1の文字コードがstr2より小さいかを判定
 lle(str1,str2) str1の文字コードがstr2以下かを判定
2019/5/4モダンFortran勉強会.f0113
文字列の短所
 要素の参照がめんどう
 str(i:j)でi文字目からj文字目までのサブ文字列を参照
 1文字だけでも,範囲指定が必要

 str(i:i)でi文字目を参照
 間違えたときのエラーメッセージがわかりにくい
 str(終端:1:-1)で文字列反転は不可能
 エラーメッセージがわかりにくい
print *,str(6:6) !d
print *,str(3:7) !st.da
character(*),parameter :: str = "test.dat"
2019/5/4モダンFortran勉強会.f0114
文字型配列と文字列の相互変換
 文字列も文字型配列も,メモリ上での並びは同じ
 相互に変換可能
 Fortranの秘密兵器transfer関数
character(:),allocatable :: str
character,allocatable :: charArray(:)
str = "test.dat"
charArray = transfer(str, charArray)
print *,charArray,size(charArray) !test.dat 8
!文字の配列を反転して文字列へ変換
str = transfer(charArray(size(charArray):1:-1),str)
print *,str,len(str) !tad.tset 8
2019/5/4モダンFortran勉強会.f0115
混同する理由
 まずどっちがどっちかわかってない
 文字列と文字型配列に区別がないと思っている
 Fortranの混沌とした型宣言が原因の一つ
 例えばinteger型の配列(8要素)
character(8) :: a
character :: a(8)
use,intirnsic :: iso_fortran_env,only:int32
integer,dimension(8) :: int
integer :: int(8)
integer*4,dimension(8) :: int
integer(4) :: int(8)
integer(int32) :: int(8) !←これが良い
全て同じ
(kind=4が4バイトを
意味する環境では)
同じとしか思えない
2019/5/4モダンFortran勉強会.f0116
混同する理由
 区別しなくても問題ない使い方(しかできない/知らない)
 文字列専用の関数の存在を知らない
 自力で空白を除去する処理を書いている
 要素を参照する場合,参照の仕方が違うだけなので,場当たり的に
対処できる
 char(i)としてエラーが出たらchar(i:i)にすればいい
 配列要素数を固定しているので,柔軟でなくてもよい
 レガシー環境では,OSの都合で文字制限が設けられる
 ファイル名8文字+拡張子3文字
2019/5/4モダンFortran勉強会.f0117
混同する理由
 関数の型チェックが機能しない場合がある
 仮引数の書き方がややこしい
 関数に配列を渡すときの仮引数
 形状明示配列
 形状引継配列
 大きさ引継配列
 関数に文字列を渡すときの仮引数
 形状明示
 大きさ引継
2019/5/4モダンFortran勉強会.f0118
関数を書く位置と呼称の対応
 関数を書く場所によって呼称が変わる
 内部関数,モジュール関数は型チェックが行われる
 グローバル関数はコンパイル時の型チェックがザル
program main
use :: kernel
implicit none
contains
ここに書くと内部関数(サブルーチン)
end program main
ここに書くとグローバル関数(サブルーチン)
module kernel
use :: kernel
implicit none
contains
ここに書くとモジュール関数(サブルーチン)
end module kernel
2019/5/4モダンFortran勉強会.f0119
文字型配列を受け取る関数
 大きさ引継
 形状引継(配列を渡す時の標準的な書き方)
 形状明示
subroutine internalReceiveCharArrayAssumedSize(charArray)
implicit none
character,intent(in) :: charArray(*)
print *,charArray(:8) !使うときに要素数を明記
end subroutine internalReceiveCharArrayAssumedSize
subroutine internalReceiveCharArrayAssumedShape(charArray)
implicit none
character,intent(in) :: charArray(:)
print *,charArray
end subroutine internalReceiveCharArrayAssumedShape
subroutine internalReceiveCharArrayExplicitShape(charArray)
implicit none
character,intent(in) :: charArray(8)
print *,charArray
end subroutine internalReceiveCharArrayExplicitShape
2019/5/4モダンFortran勉強会.f0120
文字列を受け取る関数
 大きさ引継(という名称かは不明だが,類似性から)
 形状引継
 形状明示
subroutine internalReceiveStringAssumedSize(str)
implicit none
character(*),intent(in) :: str
print *,str !使うときに要素数を明記しなくてよい
end subroutine internalReceiveStringAssumedSize
subroutine internalReceiveStringAssumedShape(str)
implicit none
character(:),intent(in) :: str
print *,str
end subroutine internalReceiveStringAssumedShape
subroutine internalReceiveStringExplicitShape(str)
implicit none
character(8),intent(in) :: str
print *,str
end subroutine internalReceiveStringExplicitShape
コンパイルエラー
character(:)はallocatableと一緒に使う
2019/5/4モダンFortran勉強会.f0121
仮引数の型とその書き方の対応
文字型配列 文字列
型宣言
要素数
の明記
型宣言
要素数
の明記
大きさ引継 character :: charArray(*) 要 character(*) :: str 不要
形状引継 character :: charArray(:) 不要 character(:) :: str
形状明示 character :: charArray(8) 不要 character(8) :: str 不要
2019/5/4モダンFortran勉強会.f0122
仮引数が文字型配列
実引数が文字型配列
 大きさ引継

 当然OK
 形状引継

 当然OK
 形状明示

 当然OK
call internalReceiveCharArrayAssumedSize(charArray)
call internalReceiveCharArrayAssumedShape(charArray)
call internalReceiveCharArrayExplicitShape(charArray)
2019/5/4モダンFortran勉強会.f0123
仮引数が文字列
実引数が文字列
 大きさ引継

 当然OK
 形状引継
 形状明示

 当然OK
call internalReceiveStringAssumedSize(str)
call internalReceiveStringExplicitShape(str)
2019/5/4モダンFortran勉強会.f0124
仮引数が文字列
実引数が文字型配列
 大きさ引継

 コンパイル時に型チェックでエラー
 形状引継
 形状明示

 コンパイル時に型チェックでエラー
call internalReceiveStringAssumedSize(charArray)
call internalReceiveStringExplicitShape(charArray)
2019/5/4モダンFortran勉強会.f0125
仮引数が文字型配列
実引数が文字列
 大きさ引継

 なぜかOK
 形状引継

 コンパイル時に型チェックでエラー
 形状明示(レガシーコードでは形状を明示することが多いので,型違いに気づかない)

 なぜかOK
call internalReceiveCharArrayAssumedSize(str)
call internalReceiveCharArrayAssumedShape(str)
call internalReceiveCharArrayExplicitShape(str)
2019/5/4モダンFortran勉強会.f0126
仮引数・実引数の型とコンパイルエラー
 内部関数,モジュール関数
文字型配列 文字列
文字型
配列
大きさ引継 ○ ○
形状引継 ○ ×
形状明示 ○ ○
仮引数
実引数
文字型配列 文字列
文字列
大きさ引継 × ○
形状明示 × ○
仮引数
実引数
これがマズい
2019/5/4モダンFortran勉強会.f0127
仮引数・実引数の型とコンパイルエラー
 グローバル関数
文字型配列 文字列
文字型
配列
大きさ引継 ○ ×*
形状引継 ○ ×
形状明示 ○ ○
仮引数
実引数
文字型配列 文字列
文字列
大きさ引継 × ○
形状明示 × ○
仮引数
実引数
*関数インタフェース
が必要というエラー
2019/5/4モダンFortran勉強会.f0128
仮引数が文字型配列
実引数が文字列
 関数をグローバルに置いた場合

 コンパイルエラー
 形状引継および大きさ引継配列が仮引数のグローバル関数は
インタフェースが必要
 FORTRANでは,1ファイルに1サブルーチンのみを書く
コーディング規約があった
 すべてのサブルーチンがグローバル
 形状明示配列ならエラーはでない
 仮引数を形状/大きさ引継配列にするとエラーが出る
 形状/大きさ引継配列を避け,形状明示配列を使う傾向がある
globalReceiveCharArrayAssumedSize(str)
2019/5/4モダンFortran勉強会.f0129
なぜ混同してしまうか
 文字列と文字型配列の区別が付いていない
 文字列と文字型配列を渡す場合の仮引数の書き方がや
やこしい
 文字列と文字型配列を混同しても,関数の型チェックが
機能しない場合がある
 コーディング規約に起因するエラーが発生する
 形状明示配列が全てを解決してくれる
2019/5/4モダンFortran勉強会.f0130
対策
 とりあえずは以下の組合せを使う
 機能を最大限利用でき,かつ間違いがない
 文字列
 型宣言 character(:),allocatable :: str
 仮引数 character(*) :: str
 文字型配列
 型宣言 character,allocatable :: charArray(:)
 仮引数 character(:) :: charArray
2019/5/4モダンFortran勉強会.f0131
対策
 文字列と文字型配列があることを知る
 仮引数の種類と,エラーが出ない実引数の組合せを知る
 関数をグローバルに置かず,内部関数もしくはモジュール
を使う
 1ファイル1サブルーチンを徹底したいのなら,Fortran2008の
サブモジュールを使う
 関数自身やモジュールの責務が曖昧=設計がイマイチ
 グローバル関数の使用を止める
 コンパイル時の型チェックが行われない
 型の不一致があってもリンクエラーしか出ない
 そんな関数みつからないぞというエラー
2019/5/4モダンFortran勉強会.f0132
根本的な対策
 String型を作ろう!
 プロトタイプができたので,gnu,PGI Fortranで動作確認中
 そのうち公開します
type(String) :: str
str = otherStr
str = "string"
str = charArray
str = str//othrStr
str = str//"string"
str = str//charArray
print *,str
print '(DT"String"(5))',str
String型,文字列,文字の配列を代入,
あるいは連結ができる
派生型入出力サブルーチンを定義済み
2019/5/4モダンFortran勉強会.f0133
Type-Bound Procedure
 length()
 文字列の長さを返す
 charAt(番号)
 引数で指定した番号の文字を返す
 asciiCodeAt(番号)
 引数で指定した番号の文字をASCIIコードで返す
2019/5/4モダンFortran勉強会.f0134
Type-Bound Procedure
 split(delimiter)
 引数で指定した文字列を区切りとして,文字列を分解する
 substr(始点,長さ)
 文字列の始点から長さ分,サブ文字列として抽出する
 substring(始点,終端)
 文字列の始点から終端の範囲をサブ文字列として抽出する
2019/5/4モダンFortran勉強会.f0135
Type-Bound Procedure
 indexOf(検索文字列)
 文字列中に検索文字列があるか,あれば何番目から始まる
かを返す
 lastIndexOf(検索文字列)
 後ろから検索する
 replace(検索文字列,置換後の文字列)
 検索文字列を置換後の文字列に置換する
2019/5/4モダンFortran勉強会.f0136
Type-Bound Procedure
 repeat(繰返し回数)
 文字列を指定回数繰り返す
 *演算子をオーバーロードしているのでstr*3と書ける
 toLowerCase()
 大文字アルファベットを小文字に変換する
 toUpperCase()
 小文字アルファベットを大文字に変換する
2019/5/4モダンFortran勉強会.f0137
Type-Bound Procedure
 toInteger()
 文字列を整数に変換する
 toBinary{32|64}()
 文字列を{単|倍}精度実数に変換する
 toCharArray()
 文字列を文字の配列に変換する
 toCString()
 文字列をC言語の文字列に変換する
2019/5/4モダンFortran勉強会.f0138
Type-Bound Procedure
 trim()
 文字列の左右の空白を除去する
 trimLeft/trimStart()
 文字列の左側の空白を除去する
 trimRight/trimEnd()
 文字列の右側の空白を除去する
2019/5/4モダンFortran勉強会.f0139

More Related Content

What's hot

「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
直久 住川
 
ガイデットフィルタとその周辺
ガイデットフィルタとその周辺ガイデットフィルタとその周辺
ガイデットフィルタとその周辺Norishige Fukushima
 
ゲーム木探索技術とコンピュータ将棋への応用
ゲーム木探索技術とコンピュータ将棋への応用ゲーム木探索技術とコンピュータ将棋への応用
ゲーム木探索技術とコンピュータ将棋への応用
Shogo Takeuchi
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
MITSUNARI Shigeo
 
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
Yusuke Fujimoto
 
確率ロボティクス第二回
確率ロボティクス第二回確率ロボティクス第二回
確率ロボティクス第二回
Ryuichi Ueda
 
Ultra96ボードでYOLOを高速化
Ultra96ボードでYOLOを高速化Ultra96ボードでYOLOを高速化
Ultra96ボードでYOLOを高速化
Hiroyuki Okuhata
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
MITSUNARI Shigeo
 
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust) GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
智啓 出川
 
Deflate
DeflateDeflate
Deflate
7shi
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
Fixstars Corporation
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
 
Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16
tomoaki0705
 
量子コンピュータの量子化学計算への応用の現状と展望
量子コンピュータの量子化学計算への応用の現状と展望量子コンピュータの量子化学計算への応用の現状と展望
量子コンピュータの量子化学計算への応用の現状と展望
Maho Nakata
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
 
HPC+AI ってよく聞くけど結局なんなの
HPC+AI ってよく聞くけど結局なんなのHPC+AI ってよく聞くけど結局なんなの
HPC+AI ってよく聞くけど結局なんなの
NVIDIA Japan
 
Chainer で Tensor コア (fp16) を使いこなす
Chainer で Tensor コア (fp16) を使いこなすChainer で Tensor コア (fp16) を使いこなす
Chainer で Tensor コア (fp16) を使いこなす
NVIDIA Japan
 
混合モデルとEMアルゴリズム(PRML第9章)
混合モデルとEMアルゴリズム(PRML第9章)混合モデルとEMアルゴリズム(PRML第9章)
混合モデルとEMアルゴリズム(PRML第9章)
Takao Yamanaka
 
第13回 配信講義 計算科学技術特論B(2022)
第13回 配信講義 計算科学技術特論B(2022)第13回 配信講義 計算科学技術特論B(2022)
第13回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
画像認識のための深層学習
画像認識のための深層学習画像認識のための深層学習
画像認識のための深層学習
Saya Katafuchi
 

What's hot (20)

「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
 
ガイデットフィルタとその周辺
ガイデットフィルタとその周辺ガイデットフィルタとその周辺
ガイデットフィルタとその周辺
 
ゲーム木探索技術とコンピュータ将棋への応用
ゲーム木探索技術とコンピュータ将棋への応用ゲーム木探索技術とコンピュータ将棋への応用
ゲーム木探索技術とコンピュータ将棋への応用
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
 
確率ロボティクス第二回
確率ロボティクス第二回確率ロボティクス第二回
確率ロボティクス第二回
 
Ultra96ボードでYOLOを高速化
Ultra96ボードでYOLOを高速化Ultra96ボードでYOLOを高速化
Ultra96ボードでYOLOを高速化
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
 
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust) GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
 
Deflate
DeflateDeflate
Deflate
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16
 
量子コンピュータの量子化学計算への応用の現状と展望
量子コンピュータの量子化学計算への応用の現状と展望量子コンピュータの量子化学計算への応用の現状と展望
量子コンピュータの量子化学計算への応用の現状と展望
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
HPC+AI ってよく聞くけど結局なんなの
HPC+AI ってよく聞くけど結局なんなのHPC+AI ってよく聞くけど結局なんなの
HPC+AI ってよく聞くけど結局なんなの
 
Chainer で Tensor コア (fp16) を使いこなす
Chainer で Tensor コア (fp16) を使いこなすChainer で Tensor コア (fp16) を使いこなす
Chainer で Tensor コア (fp16) を使いこなす
 
混合モデルとEMアルゴリズム(PRML第9章)
混合モデルとEMアルゴリズム(PRML第9章)混合モデルとEMアルゴリズム(PRML第9章)
混合モデルとEMアルゴリズム(PRML第9章)
 
第13回 配信講義 計算科学技術特論B(2022)
第13回 配信講義 計算科学技術特論B(2022)第13回 配信講義 計算科学技術特論B(2022)
第13回 配信講義 計算科学技術特論B(2022)
 
画像認識のための深層学習
画像認識のための深層学習画像認識のための深層学習
画像認識のための深層学習
 

Similar to Why do we confuse String and Array of Characters in Fortran?

Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Next
dynamis
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflow
ionis111
 
Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Yuichi Sakuraba
 
Swiftおさらい
SwiftおさらいSwiftおさらい
Swiftおさらい
Hidenori Takeshita
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
 
Youtube embedded
Youtube embeddedYoutube embedded
Youtube embeddedJun Chiba
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
Akineko Shimizu
 
Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswiftSwift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswift
Tomohiro Kumagai
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
do_aki
 
OpenFOAM+のCo-simulation機能とFMUの試作
OpenFOAM+のCo-simulation機能とFMUの試作OpenFOAM+のCo-simulation機能とFMUの試作
OpenFOAM+のCo-simulation機能とFMUの試作
Amane Tanaka
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
和弘 井之上
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Takuya Matsunaga
 
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARMAppearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
FFRI, Inc.
 

Similar to Why do we confuse String and Array of Characters in Fortran? (13)

Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Next
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflow
 
Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。
 
Swiftおさらい
SwiftおさらいSwiftおさらい
Swiftおさらい
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
Youtube embedded
Youtube embeddedYoutube embedded
Youtube embedded
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
 
Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswiftSwift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswift
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
OpenFOAM+のCo-simulation機能とFMUの試作
OpenFOAM+のCo-simulation機能とFMUの試作OpenFOAM+のCo-simulation機能とFMUの試作
OpenFOAM+のCo-simulation機能とFMUの試作
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
 
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARMAppearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
 

More from 智啓 出川

Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋
智啓 出川
 
Very helpful python code to find coefficients of the finite difference method
Very helpful python code to find coefficients of the finite difference methodVery helpful python code to find coefficients of the finite difference method
Very helpful python code to find coefficients of the finite difference method
智啓 出川
 
Pythonによる累乗近似
Pythonによる累乗近似Pythonによる累乗近似
Pythonによる累乗近似
智啓 出川
 
数値計算結果のPythonによる後処理について(1次元データのピーク値およびその位置の推定)
数値計算結果のPythonによる後処理について(1次元データのピーク値およびその位置の推定)数値計算結果のPythonによる後処理について(1次元データのピーク値およびその位置の推定)
数値計算結果のPythonによる後処理について(1次元データのピーク値およびその位置の推定)
智啓 出川
 
オブジェクト指向Fortranが拓く(はずだった)新しい世界
オブジェクト指向Fortranが拓く(はずだった)新しい世界オブジェクト指向Fortranが拓く(はずだった)新しい世界
オブジェクト指向Fortranが拓く(はずだった)新しい世界
智啓 出川
 
Schematic diagrams of GPUs' architecture and Time evolution of theoretical FL...
Schematic diagrams of GPUs' architecture and Time evolution of theoretical FL...Schematic diagrams of GPUs' architecture and Time evolution of theoretical FL...
Schematic diagrams of GPUs' architecture and Time evolution of theoretical FL...
智啓 出川
 
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE) GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
智啓 出川
 
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS) GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
智啓 出川
 
GPGPU Education at Nagaoka University of Technology: A Trial Run
GPGPU Education at Nagaoka University of Technology: A Trial RunGPGPU Education at Nagaoka University of Technology: A Trial Run
GPGPU Education at Nagaoka University of Technology: A Trial Run
智啓 出川
 
Cuda fortranの利便性を高めるfortran言語の機能
Cuda fortranの利便性を高めるfortran言語の機能Cuda fortranの利便性を高めるfortran言語の機能
Cuda fortranの利便性を高めるfortran言語の機能
智啓 出川
 
PGI CUDA FortranとGPU最適化ライブラリの一連携法
PGI CUDA FortranとGPU最適化ライブラリの一連携法PGI CUDA FortranとGPU最適化ライブラリの一連携法
PGI CUDA FortranとGPU最適化ライブラリの一連携法
智啓 出川
 
教育機関でのJetsonの活用の可能性
教育機関でのJetsonの活用の可能性教育機関でのJetsonの活用の可能性
教育機関でのJetsonの活用の可能性
智啓 出川
 
GPGPU Seminar (GPGPU and CUDA Fortran)
GPGPU Seminar (GPGPU and CUDA Fortran)GPGPU Seminar (GPGPU and CUDA Fortran)
GPGPU Seminar (GPGPU and CUDA Fortran)
智啓 出川
 
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
智啓 出川
 
GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)
智啓 出川
 
2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調
2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調
2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調
智啓 出川
 
2015年度先端GPGPUシミュレーション工学特論 第14回 複数GPUの利用
2015年度先端GPGPUシミュレーション工学特論 第14回 複数GPUの利用2015年度先端GPGPUシミュレーション工学特論 第14回 複数GPUの利用
2015年度先端GPGPUシミュレーション工学特論 第14回 複数GPUの利用
智啓 出川
 
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用 (高度な最適化)
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用(高度な最適化)2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用(高度な最適化)
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用 (高度な最適化)
智啓 出川
 
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用 (支配方程式,CPUプログラム)
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用(支配方程式,CPUプログラム)2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用(支配方程式,CPUプログラム)
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用 (支配方程式,CPUプログラム)
智啓 出川
 
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解 (線形連立一次方程式)
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解(線形連立一次方程式)2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解(線形連立一次方程式)
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解 (線形連立一次方程式)
智啓 出川
 

More from 智啓 出川 (20)

Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋
 
Very helpful python code to find coefficients of the finite difference method
Very helpful python code to find coefficients of the finite difference methodVery helpful python code to find coefficients of the finite difference method
Very helpful python code to find coefficients of the finite difference method
 
Pythonによる累乗近似
Pythonによる累乗近似Pythonによる累乗近似
Pythonによる累乗近似
 
数値計算結果のPythonによる後処理について(1次元データのピーク値およびその位置の推定)
数値計算結果のPythonによる後処理について(1次元データのピーク値およびその位置の推定)数値計算結果のPythonによる後処理について(1次元データのピーク値およびその位置の推定)
数値計算結果のPythonによる後処理について(1次元データのピーク値およびその位置の推定)
 
オブジェクト指向Fortranが拓く(はずだった)新しい世界
オブジェクト指向Fortranが拓く(はずだった)新しい世界オブジェクト指向Fortranが拓く(はずだった)新しい世界
オブジェクト指向Fortranが拓く(はずだった)新しい世界
 
Schematic diagrams of GPUs' architecture and Time evolution of theoretical FL...
Schematic diagrams of GPUs' architecture and Time evolution of theoretical FL...Schematic diagrams of GPUs' architecture and Time evolution of theoretical FL...
Schematic diagrams of GPUs' architecture and Time evolution of theoretical FL...
 
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE) GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
 
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS) GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
 
GPGPU Education at Nagaoka University of Technology: A Trial Run
GPGPU Education at Nagaoka University of Technology: A Trial RunGPGPU Education at Nagaoka University of Technology: A Trial Run
GPGPU Education at Nagaoka University of Technology: A Trial Run
 
Cuda fortranの利便性を高めるfortran言語の機能
Cuda fortranの利便性を高めるfortran言語の機能Cuda fortranの利便性を高めるfortran言語の機能
Cuda fortranの利便性を高めるfortran言語の機能
 
PGI CUDA FortranとGPU最適化ライブラリの一連携法
PGI CUDA FortranとGPU最適化ライブラリの一連携法PGI CUDA FortranとGPU最適化ライブラリの一連携法
PGI CUDA FortranとGPU最適化ライブラリの一連携法
 
教育機関でのJetsonの活用の可能性
教育機関でのJetsonの活用の可能性教育機関でのJetsonの活用の可能性
教育機関でのJetsonの活用の可能性
 
GPGPU Seminar (GPGPU and CUDA Fortran)
GPGPU Seminar (GPGPU and CUDA Fortran)GPGPU Seminar (GPGPU and CUDA Fortran)
GPGPU Seminar (GPGPU and CUDA Fortran)
 
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
 
GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)
 
2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調
2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調
2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調
 
2015年度先端GPGPUシミュレーション工学特論 第14回 複数GPUの利用
2015年度先端GPGPUシミュレーション工学特論 第14回 複数GPUの利用2015年度先端GPGPUシミュレーション工学特論 第14回 複数GPUの利用
2015年度先端GPGPUシミュレーション工学特論 第14回 複数GPUの利用
 
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用 (高度な最適化)
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用(高度な最適化)2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用(高度な最適化)
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用 (高度な最適化)
 
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用 (支配方程式,CPUプログラム)
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用(支配方程式,CPUプログラム)2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用(支配方程式,CPUプログラム)
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用 (支配方程式,CPUプログラム)
 
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解 (線形連立一次方程式)
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解(線形連立一次方程式)2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解(線形連立一次方程式)
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解 (線形連立一次方程式)
 

Why do we confuse String and Array of Characters in Fortran?