WEBVTT

1
00:00:00.000 --> 00:00:00.990
こんにちは。

2
00:00:00.990 --> 00:00:05.610
今回はジャバスクリプトのマス・ログワンピーを紹介します。

3
00:00:05.610 --> 00:00:10.559
これは、一たすエックスの自然対数を求める標準のメソッドです。

4
00:00:10.559 --> 00:00:18.314
自然対数とは、約二点七一八という定数を底とする対数で、増減の分析や統計の処理でよく使われます。

5
00:00:18.314 --> 00:00:23.264
たとえば五パーセントの増加は、割合で表すとゼロ点ゼロ五です。

6
00:00:23.264 --> 00:00:29.039
この変化を対数で表すには、マス・ログワンピーにゼロ点ゼロ五を渡します。

7
00:00:29.039 --> 00:00:33.658
変化がなければ結果はゼロ、減っていれば負の値になります。

8
00:00:33.658 --> 00:00:41.908
普通の計算と何が違うのか、なぜ小さな変化で精度が問題になるのかを、この動画で順番に確かめていきます。

9
00:00:41.908 --> 00:00:43.135
まず動作環境です。

10
00:00:43.135 --> 00:00:47.428
マス・ログワンピーは、二千十五年に追加されたジャバスクリプト標準の機能で、

11
00:00:47.428 --> 00:00:51.720
ブラウザーとノード・ジェイエスの両方で利用できます。

12
00:00:51.720 --> 00:00:56.218
二千十五年七月以降、主要ブラウザーを横断して使える機能とされており、現行のクローム、

13
00:00:56.218 --> 00:01:00.715
エッジ、ファイアフォックス、サファリが対象です。

14
00:01:00.715 --> 00:01:08.075
記事のサンプルはノード・ジェイエス二十二系または二十四系を想定し、追加パッケージや実験的な設定は使いません。

15
00:01:08.075 --> 00:01:14.480
古い組み込みブラウザーを対象にする場合は、使う前にタイプオブで関数かどうかを確認してください。

16
00:01:14.480 --> 00:01:18.296
結果がフォルスなら、その環境ではそのまま実行できません。

17
00:01:18.296 --> 00:01:20.485
基本の書き方を見ましょう。

18
00:01:20.485 --> 00:01:25.199
呼び出し方は、マス・ログワンピー、かっこ、エックスです。

19
00:01:25.199 --> 00:01:28.567
エックスには、一へ加える数値を渡します。

20
00:01:28.567 --> 00:01:33.618
増減率なら、五パーセントをゼロ点ゼロ五として渡してください。

21
00:01:33.618 --> 00:01:37.996
戻り値はナンバー型で、一たすエックスの自然対数です。

22
00:01:37.996 --> 00:01:45.573
ゼロを渡せばゼロ、ゼロ点ゼロ五なら約ゼロ点ゼロ四八七九、一なら約ゼロ点六九三一が返ります。

23
00:01:45.573 --> 00:01:52.140
マスはコンストラクターではないため、新しくインスタンスを作る必要はありません。

24
00:01:52.140 --> 00:01:59.548
戻り値はプロミスではなく同期的に得られる数値なので、アウェイトやコールバックも不要です。

25
00:01:59.548 --> 00:02:03.084
入力そのものを書き換えることもありません。

26
00:02:03.084 --> 00:02:06.859
このメソッドが用意された理由を、具体例で確かめます。

27
00:02:06.859 --> 00:02:11.359
ジャバスクリプトの通常の数値は、有限の精度しか持っていません。

28
00:02:11.359 --> 00:02:18.909
イーのマイナス十六乗という値はゼロではありませんが、一に加えると、結果は丸められて一になってしまいます。

29
00:02:18.909 --> 00:02:23.845
その後で対数を取っても、元の微小な変化は取り戻せず、結果はゼロです。

30
00:02:23.845 --> 00:02:31.249
一方、マス・ログワンピーに元の変化をそのまま渡すと、約イーのマイナス十六乗という正しい結果が返ります。

31
00:02:31.249 --> 00:02:34.879
大切なのは、元の小さい値を、そのまま渡すことです。

32
00:02:34.879 --> 00:02:38.944
先に一へ加えてから引き直しても、失われた差は戻りません。

33
00:02:38.944 --> 00:02:42.085
特殊な値の結果をまとめて確認します。

34
00:02:42.085 --> 00:02:46.622
エックスがマイナス一なら、結果はマイナス無限大です。

35
00:02:46.622 --> 00:02:51.334
マイナス一より小さい値を渡すと、結果はナンになります。

36
00:02:51.334 --> 00:02:57.093
ゼロはゼロ、マイナスゼロはマイナスゼロ、無限大は無限大が返ります。

37
00:02:57.093 --> 00:03:02.852
有限のエックスがマイナス一より大きければ、戻り値も有限になります。

38
00:03:02.852 --> 00:03:11.054
ここで注意したいのは、範囲を外れた入力でも例外にはならず、特殊な値が静かに返ってくることです。

39
00:03:11.054 --> 00:03:16.114
計算が成功して見えても、入力が異常だった可能性は残ります。

40
00:03:16.114 --> 00:03:21.524
だからこそ、用途に合わせて事前の入力チェックが大切になります。

41
00:03:21.524 --> 00:03:28.101
実例として、増減率を対数へ変換するトゥーログチェンジという関数を作ります。

42
00:03:28.101 --> 00:03:33.612
最初に、引数がナンバー型で、かつ有限の数値かどうかを調べます。

43
00:03:33.612 --> 00:03:38.590
文字列や無限大、ナンはここでタイプエラーとして止めます。

44
00:03:38.590 --> 00:03:46.412
次に、値がマイナス一以下でないかを確認し、範囲を外れるならレンジエラーとして報告します。

45
00:03:46.412 --> 00:03:54.411
この順番がポイントで、まず数として扱えるかを見て、次に増減率として許される範囲かを見ます。

46
00:03:54.411 --> 00:04:00.989
どちらの検査も通った場合だけ、マス・ログワンピーで対数を計算して返します。

47
00:04:00.989 --> 00:04:06.144
検証と計算の役割を分けることで、読みやすい関数になります。

48
00:04:06.144 --> 00:04:07.931
計算結果を読みます。

49
00:04:07.931 --> 00:04:11.506
変化なし、つまりゼロなら結果はゼロです。

50
00:04:11.506 --> 00:04:17.762
五パーセント増加のゼロ点ゼロ五では、約ゼロ点ゼロ四八七九〇になります。

51
00:04:17.762 --> 00:04:24.911
五パーセント減少のマイナスゼロ点ゼロ五では、約マイナスゼロ点ゼロ五一二九三です。

52
00:04:24.911 --> 00:04:29.915
増加と減少で、絶対値が少しだけ違う点に注目してください。

53
00:04:29.915 --> 00:04:37.601
基準となる値が時点ごとに変わるため、符号を反転しただけの同じ大きさにはならないのです。

54
00:04:37.601 --> 00:04:43.320
微小な増加であるイーのマイナス十六乗は、通常の小数表示では読みにくいため、

55
00:04:43.320 --> 00:04:49.040
指数表記に直してイーのマイナス十六乗と表示しています。

56
00:04:49.040 --> 00:04:52.972
表示の桁数を絞ることで、読みやすくなります。

57
00:04:52.972 --> 00:04:55.541
不正な入力を渡した場合も確認します。

58
00:04:55.541 --> 00:05:02.820
マイナス一とマイナス一点一は、数値としては有限ですが、増減率の範囲を外れるためレンジエラーになります。

59
00:05:02.820 --> 00:05:07.673
文字列のゼロ点ゼロ五は、数字に見えても型が違うためタイプエラーです。

60
00:05:07.673 --> 00:05:12.098
無限大とナンも、有限でない数値としてタイプエラーで止まります。

61
00:05:12.098 --> 00:05:18.235
マス・ログワンピーを直接呼ぶだけでは、これらは例外にならず特殊な値が返ってしまいます。

62
00:05:18.235 --> 00:05:24.087
完成コードが事前に検査して例外を投げるのは、処理を止める条件を明確にするためです。

63
00:05:24.087 --> 00:05:30.224
これらの結果は、ノード・ジェイエスの実機でも確認済みで、記事の期待出力と一致しました。

64
00:05:30.224 --> 00:05:31.817
実行方法は二通りです。

65
00:05:31.817 --> 00:05:39.635
ブラウザーでは、通常のウェブページを開き、開発者ツールのコンソールへ実例のコード全体を貼り付けて実行します。

66
00:05:39.635 --> 00:05:44.412
画面要素を操作しないため、専用のエイチティーエムエルは要りません。

67
00:05:44.412 --> 00:05:49.697
ノード・ジェイエスでは、コードをログチェンジ・シージェイエスというファイルに保存し、

68
00:05:49.697 --> 00:05:54.981
ターミナルでノード、スペース、ファイル名と入力して実行します。

69
00:05:54.981 --> 00:05:59.470
最初にバージョンを確認するコマンドも併せて実行すると安心です。

70
00:05:59.470 --> 00:06:04.392
ウェブサーバーの起動や、エヌピーエム・インストールは必要ありません。

71
00:06:04.392 --> 00:06:11.052
コード全体を関数で囲んでいるので、繰り返し実行しても変数名が衝突しにくい構成になっています。

72
00:06:11.052 --> 00:06:13.408
失敗例を三つ押さえます。

73
00:06:13.408 --> 00:06:17.532
一つ目は、パーセントと割合の取り違えです。

74
00:06:17.532 --> 00:06:26.368
五パーセント増加に、そのまま五を渡すと、計算対象は一・ゼロ五ではなく六になってしまいます。

75
00:06:26.368 --> 00:06:32.651
これはエラーにならないため、入力チェックだけでは見つかりません。

76
00:06:32.651 --> 00:06:39.327
パーセントで受け取るなら、百で割って割合に直してから渡してください。

77
00:06:39.327 --> 00:06:42.469
二つ目は、丸めのタイミングです。

78
00:06:42.469 --> 00:06:51.305
元データがすでに丸められて変化がゼロになっていれば、このメソッドでも精度は復元できません。

79
00:06:51.305 --> 00:06:53.661
三つ目は比較の方法です。

80
00:06:53.661 --> 00:07:02.104
結果を等号三つで固定の小数と比べるのではなく、用途に合った許容誤差で判断してください。

81
00:07:02.104 --> 00:07:04.030
活用場面とまとめです。

82
00:07:04.030 --> 00:07:12.085
時系列の増減率を対数変化へ変換すると、掛け算で連続する変化を、足し算で表せるようになります。

83
00:07:12.085 --> 00:07:17.339
たとえば五パーセント増えた後に五パーセント減ると、倍率は一・ゼロ五かけるゼロ・九五となり、

84
00:07:17.339 --> 00:07:22.592
元の値には完全には戻りません。

85
00:07:22.592 --> 00:07:27.846
そのわずかな減少も、対数変化なら負の値として正しく扱えます。

86
00:07:27.846 --> 00:07:33.362
別の使い方として、アクセス件数のようなゼロ以上のデータを変換すると、ゼロ件をゼロのまま保ちながら、

87
00:07:33.362 --> 00:07:38.878
大きな値の差を圧縮できます。

88
00:07:38.878 --> 00:07:50.260
増減率ならマイナス一より大きい値、件数ならゼロ以上の値というように、目的に合わせて受け付ける範囲と単位を決めてから使ってください。

89
00:07:50.260 --> 00:07:51.836
お疲れさまでした。
