算額あれこれ

算額問題をコンピュータで解きます

Julia -- 3(算術演算子,数学関数,文字関数)

算術演算子

和  +, +(x, y, ...)

julia> 1 + 2
3

julia> +(1, 2)
3

julia> 1 + 2 + 3 + 4 + 5
15

julia> +(1, 2, 3, 4, 5) # 累和
15

  -, -(x, y)

julia> 10 - 3
7

julia> -(10, 3)
7

積  *, *(x, y, ...)

julia> 2 * 3
6

julia> *(2, 3)
6

julia> 1 * 2 * 3 * 4 * 5 # 累積
120

julia> *(1, 2, 3, 4, 5)
120

  /, /(x, y)

julia> 15 / 4
3.75

julia> /(15, 4)
3.75

整数除算  ÷, div(x, y)

julia> 15 ÷ 4 # '÷' は Unicode U+00F7 (category Sm: Symbol, math)
3

÷ を 入力するのは '\div' の後に tab キーを押す。

すなわち,15 ÷ 4 は '15 \div[tab] 4[return]' と入力する。

julia> 15.0 ÷ 4
3.0

julia> div(15, 4)
3

julia> div(15.0, 4)
3.0

剰余  %, rem(x, y)

julia> 15 % 4
3

julia> 15.0 % 4
3.0

julia> 23.1 % 4.2
2.1000000000000005

julia> rem(15, 4)

3

julia> rem(15.0, 4)
3.0

julia> rem(23.1, 4.2)
2.1000000000000005

 

分数(有理数表現)  //

julia> 22 // 7
22//7

julia> 22 / 7 # 実数除算
3.142857142857143

julia> float(22 // 7) # 実数に変換する
3.142857142857143

julia> 22 // 7 + 0 # 0 を足しても表示は不変
22//7

julia> 22 // 7 + 0.0 # 0.0 を足すと実数になる
3.142857142857143

演算子の省略(数学的表記)

乗算記号の省略

julia> x = 1; y = 2; z = 4 # 最後の評価結果のみが表示される
4

julia> x = 1; y = 2; z = 4; # 最後も ; をつければ,何も表示されない

julia> xyz = 12345; # ; をつければ,何も表示されない

julia> 2*(x + y)
6

julia> 2(x + y)
6

julia> 3.5(x+y)
10.5

julia> z(x + y)
ERROR: MethodError: objects of type Int64 are not callable

julia> z*(x + y)
12

julia> x = 3;

julia> 2^3x # 下に示すようにこれは 2 ^ (3 * x) を意味する。
512

julia> 2^9
512

julia> 6 // 2(2 + 1) # 上の例でも同じだが,他の演算子より優先順位が高い。
1//1

数学関数

絶対値  abs()

julia> abs(-123)
123

平方根  sqrt()

julia> sqrt(3)
1.7320508075688772

立方根  cbrt()

julia> cbrt(10)
2.154434690031884

julia> 10^(1/3) # cbrt(10) と同じ結果になる。
2.154434690031884

丸め  round()

julia> round(1.5)
2.0

julia> round(2.5) # 注意!! 単なる四捨五入ではない!!
2.0

julia> round(1.23456, digits=2) # 小数点以下を指定して丸める。
1.23

julia> round(1234, digits=-2) # 小数点の左でも丸められる。
1200.0

  floor()

julia> floor(3.145)
3.0

julia> floor(-3.145) # 引数を越えない整数!
-4.0

天井  ceil()

julia> ceil(3.145)
4.0

julia> ceil(-3.145) # 引数より大きいか等しい数
-3.0

切り捨て  trunc()

julia> trunc(1.3)
1.0

julia> trunc(-1.3) # 0 方向への丸め
-1.0

絶対値  abs()

julia> abs(-12)
12

符号  sign(x)

julia> sign(-1.2)
-1.0

julia> sign(0)
0

julia> sign(10.4)
1.0

符号付け  copysign(x, y)

x の絶対値に y の符号を付けたものを返す。

julia> copysign(10, -23)
-10

最大公約数  gcd()

julia> gcd(36, 96)
12

最小公倍数  lcm()

julia> lcm(36, 96)
288

指数関数  exp() exp10(), exp2(),

julia> exp(1) # e^1 = ネイピア数
2.718281828459045

julia> exp(2.32) # == e ^ 2.32
10.175674306073333

julia> exp10(1.23) # == 10^1.23
16.982436524617444

julia> exp2(5) # == 2 ^ 5
32.0

対数関数  log(), log10(), log2()

julia> log(2) # 自然対数
0.6931471805599453

julia> log10(2) # 常用対数
0.3010299956639812

julia> log2(2) # 底が 2 の定数
1.0

三角関数  sin(), cos(), tan()

sind(), cosd(), tand() は引数が「度」である。

julia> x = pi / 3 # 角度60度
1.0471975511965976

julia> sin(x) # sqrt(3)/2
0.8660254037844386

julia> sind(60) # 60度
0.8660254037844386

julia> cos(x) # 1/2
0.5000000000000001

julia> tan(x) # sqrt(3)/1
1.7320508075688767

逆三角関数  asin(), acos(), atan()

julia> asin(sin(1.2))
1.1999999999999997

julia> acos(cos(1.2))
1.2

julia> atan(tan(1.2))
1.2

双曲線関数  sinh(), cosh(), tanh()

julia> sinh(2)
3.626860407847019

julia> cosh(2)
3.7621956910836314

julia> tanh(2)
0.9640275800758169

逆双曲線関数  asinh(), acosh(), atanh()

julia> asinh(sinh(2))
2.0

julia> acosh(cosh(2))
2.0

julia> atanh(tanh(2))
2.0000000000000004

その他,特別な関数がある。SpecialFunctions.jl.

文字に対する関数

文字のコード

julia> Int('a')
97

コードから文字

julia> Char(97)
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)

文字に対する演算

julia> 'A' < 'B'
true

julia> 'C' - 'A'
2

julia> 'A' + 5
'F': ASCII/Unicode U+0046 (category Lu: Letter, uppercase)

文字列に対する操作

julia> str = "Hello, world.\n"
"Hello, world.\n"

文字(列)の取り出し

julia> str[1]
'H': ASCII/Unicode U+0048 (category Lu: Letter, uppercase)

julia> str[begin]
'H': ASCII/Unicode U+0048 (category Lu: Letter, uppercase)

julia> str[end]
'\n': ASCII/Unicode U+000A (category Cc: Other, control)

julia> str[end - 1]
'.': ASCII/Unicode U+002E (category Po: Punctuation, other)

julia> str[4:9]
"lo, wo"

julia> str[6]
',': ASCII/Unicode U+002C (category Po: Punctuation, other)

julia> str[6:6]
","

文字列抽出関数  SubString()

julia> SubString(str, 1, 4)
"Hell"

文字列連結  string()

julia> greet = "Hello"
"Hello"

julia> whom = "world"
"world"

julia> string(greet, ", ", whom, ".\n")
"Hello, world.\n"

'$変数' を '変数の値' で置き換える

julia> "$greet, $whom.\n"
"Hello, world.\n"

julia> print("I have \$100 in my account.\n") # $ のエスケープ
I have $100 in my account.

文字連結演算子  *

julia> greet * ", " * whom * ".\n"
"Hello, world.\n"

文字列の長さ  length()

julia> length(str)
14

文字列の比較

julia> "abc" < "abcd"
true

julia> "abc" != "def"
true

トリプルクオートで囲まれたテキスト

julia> str = """
       Hello,
       World.
       """
"Hello,\nWorld.\n"

文字の位置  findfirst(), findlast(), findnext(), findprev()

julia> findfirst(isequal('o'), "xylophone")
4

julia> findlast(isequal('o'), "xylophone")
7

julia> indfirst(isequal('z'), "xylophone")
ERROR: UndefVarError: indfirst not defined
Stacktrace:
 [1] top-level scope at REPL[81]:1

第 3 引数でオフセットを指定できる。

julia> findnext(isequal('o'), "xylophone", 1)
4

julia> findnext(isequal('o'), "xylophone", 5)
7

julia> findprev(isequal('o'), "xylophone", 5)
4

julia> findnext(isequal('o'), "xylophone", 8)

文字(列)が含まれるか  occursin()

julia> occursin("world", "Hello, world.")
true

julia> occursin("l", "Hello, world.")
true

julia> occursin("q", "Hello, world.")
false

julia> occursin('q', "Hello, world.")
false

文字列の繰り返し  repeat()

julia> repeat(".:Z:.", 10)
".:Z:..:Z:..:Z:..:Z:..:Z:..:Z:..:Z:..:Z:..:Z:..:Z:."

文字列連結(区切り文字指定)  join()

julia> join(["apples", "bananas", "pineapples"], ", ", " and ")
"apples, bananas and pineapples"