arbについて 続き

というコンパイルエラーでずっと困っていてなかなか解決しないので

flint_printf を test.c から削除してコンパイルしてみたら通った。
結果

[3.1415926535897932384626433832795028841971693993751 +/- 6.27e-50]

http://marycore.jp/prog/xcode/undefined-symbols-for-architecture-x86-64/

ここを参考にもう少しいじってみようと思う。

arbのsetupについて メモ2

arbのsetupについてメモからの続き

前回必要なファイルを特定の場所に置いた

しかし、コンパイルすると相変わらず flint/flint.h が相対参照でインクルードしている
config.hがないと言われる
#include”config.h”

http://www.itmedia.co.jp/help/tips/linux/l0302.html

ここを参照にとりあえず
~/arb/で

を入力した後

~/arb/flint/ でも

を入力した。
~/arb/flint/ での make による長いコンパイルの後(ほんの少しwarning)

前回の記事で作成した
~/arb/test.c

をコンパイルした結果

とりあえずconfig.hがないとは言われなくなった

元の導入方法その他を読み返してきた。

まず~/arb/を
~/path/to/arb/
の状態にする(/path/to/の順にフォルダを作成しその中にarbを入れる)

~/arb/にて

コンパイル

//結構時間がかかる。
//余分なコアがある場合は make -jN (Nはコア数)
//今回の環境では2

チェック

//make -jN check
//こいつも同じく時間かかる。

この辺りにエラー? 他の部分は恐らく通っている?

インストール

~/path/to/arb/flint/ に移動後 ./configure –extensions=/path/to/arb
を入力

その後
make
make check
make install

Sierraで全てのアプリ許可

環境 MacOS Sierra

システム環境設定 → セキュリティとプライバシー 
一般のダウンロードしたアプリケーションの実行許可の一覧に全てのアプリケーションがない場合

ターミナルで

と入力することで全てのアプリ許可の項目が増えてチェックされる。

元に戻すときは

参考
https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man8/spctl.8.html

https://pc-karuma.net/macos-sierra-allow-apps-from-anywhere/

arbのSetup メモ

arbのセットアップを行う際のメモ

OS:macOS High Sierra
バージョン 10.13.2

ここからファイルをダウンロード
今回使用したのはバージョン2.12.0
ダウンロードしたファイルを解凍し、任意の場所に移してarb-[バージョン番号]をarbにリネーム

arbフォルダの中にtest.cを作成
書き込んだソースは以下の通り

~/arb/test.c をコンパイル
コンパイル方法は

エラー内容

flintをダウンロードバージョンは2.5.2
*バージョン2.5以上が必要

flint-[バージョン番号] を flint にリネーム

arbフォルダの中にflintを入れてコンパイルすると

エラー内容

以下これ以降やること

arbフォルダの中で

と入力すると様々な設定項目が表示される

その中のflintやmpfr,gmp等のパスが–with-flint=…のように指定されており
デフォルトでは全て/usr/localなのでその設定項目を変更する必要がある。

MPIR(2.6.0以降) または GMP(5.1.0以降) のダウンロード
GMPの代わりにMPIRを使う場合は –enable-gmpcompat オプションを付けてコンパイルする必要がある

MPFR (3.0.0)以降のダウンロード

そしてそれぞれのパスを指定

続き

フォルダ arb で

を実行

mpfrに対して同様の動作を行うと invalid MPFR directory と表示される為、デフォルトで設定されているパスにmpfrを置く必要あり?

GMPをダウンロード
今回ダウンロードしたものは拡張子が tar.xz のもの
https://qiita.com/kamayaplus/items/d5a355e03ee78095daf7
こちらを参考に解凍

すると gmp-6.1.2.tar になるのでそれを解凍

gmpもflintと同様の動作を行うと Invalid GMP directory と表示される

なので デフォルトである /usr/local/ に GMPもMPFRも入れてみました。

test.cのコンパイルでは flint/flint.h がインクルードしている ”config.h” がないとエラーが出ている為
適切なconfig.hをフォルダflint内に入れなければいけないものの未解決状態

themida

themidaのせいで仮想で起動出来ない云々みたいな感じだったので調べてみたら

こちらのブログで既に解決してた。

VMXファイルに

を追加で起動できるようになる。

先/後読みによる条件分岐

言語によって対応してないものもあるらしい(javaでは未対応、perlでは対応)

条件分岐
(?(条件)真の時の処理)
(?(条件)真の時の処理|偽の時の処理)

後読みの条件分岐
(?(?<=pattern)真の時の処理|偽の時の処理)
patternの後ろに続く文字列に対しては真の時の処理
それ以外の位置にある文字列には偽の時の処理を適用する

条件分岐を使わずに
・「時」の前の数字は00~24
・それ以外の数字は一桁以上の数字にマッチ
を実装する例

同じ条件の後読みと否定後読みをorで分ける

キャプチャによる条件分岐

数字が一つ存在したとき\1にキャプチャ
数字が存在しない場合はそのまま\w*を評価
(1)で1番にキャプチャがされているかの条件

数字に続く英単語(0文字も含む)は真
それ以外は偽

後読みで困った所

対象の文字列

この正規表現でチェックすると

結果は

後読み(?<=pattern)をそのまま書いてみると

これはエラーになる。 理由は後読みのpatternが明白な最大長を持っていない為、 *は0文字以上 +は1文字以上

なのでこのように最大文字数を指定してあげることで 欲しい結果が得られた。

先読み/後読み

//参考

https://abicky.net/2010/05/30/135112/

https://qiita.com/mochizukikotaro/items/84f3ab2740b8efbe0dc6

3年と50年と100年

〇〇年というワードの1桁以上の数字だけマッチさせたい時

\d+年だとマッチするのは
3年
50年
100年

\d+(?=年)だとマッチするのは
1
50
100

指定された文字列の直前にある文字列をマッチ出来る
(?=\d+年)\d+
と記述した場合一桁以上の数字+年の並びになった文字列の直前の一にマッチし、その後に記述された
\d+でその位置に続く一桁以上の数字をマッチさせることになる為
実質 \d+(?=年) と同じ効果になる。

肯定的後読みは

<>で囲まれた中身のみをマッチさせたい
例えばbbbのaaaaと/aaaaだけ欲しい時は
(?<=<).+?(?=>)

否定はどちらも=を!にするのみ