diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-10-20 02:32:55 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-10-26 22:47:53 +0900 |
| commit | 751f595ff1d2142688dc833b4a7ec3e643a5c8a9 (patch) | |
| tree | 17a32750558e2493f4998dd0341f37647c322b80 /slides.typ | |
| parent | 5201520a74d8fa49f77a588204d768d8157f73f7 (diff) | |
| download | phpstudy-180-slides-751f595ff1d2142688dc833b4a7ec3e643a5c8a9.tar.gz phpstudy-180-slides-751f595ff1d2142688dc833b4a7ec3e643a5c8a9.tar.zst phpstudy-180-slides-751f595ff1d2142688dc833b4a7ec3e643a5c8a9.zip | |
draft2
Diffstat (limited to 'slides.typ')
| -rw-r--r-- | slides.typ | 230 |
1 files changed, 185 insertions, 45 deletions
@@ -1,6 +1,51 @@ #import "@preview/touying:0.6.1": * +#import "@preview/cjk-unbreak:0.2.0": remove-cjk-break-space, transform-childs #import "setoka.typ": * +#show: remove-cjk-break-space + +#let plugin_tokenize_ja_uninitialized = plugin("plugins/tokenize-ja/tokenize-ja.wasm") +#let plugin_tokenize_ja = plugin.transition(plugin_tokenize_ja_uninitialized.init) + +#let tokenize(s) = { + cbor(plugin_tokenize_ja.tokenize(bytes(s))) +} + +#let make-助詞-small(rest) = { + rest = transform-childs(rest, make-助詞-small) + if utils.is-sequence(rest) { + for child in rest.children { + if child.func() == text { + if child.has("text") { + for t in tokenize(child.text) { + if t.at(1) == "助詞" { + [#set text(size: 0.9em);#t.at(0)] + } else { + t.at(0) + } + } + } else if child.has("body") { + for t in tokenize(child.body) { + if t.at(1) == "助詞" { + [#set text(size: 0.9em);#t.at(0)] + } else { + t.at(0) + } + } + } else { + child + } + } else { + child + } + } + } else { + rest + } +} + +#show: make-助詞-small + #show: setoka-theme.with( aspect-ratio: "16-9", config-info( @@ -14,33 +59,38 @@ ), ) -#set text(font: "Noto Sans CJK JP") +#set text(font: "Noto Sans CJK JP", lang: "ja") #title-slide() #about-slide() -数値の範囲を指定して検索する API +数値の範囲を指定して \ +検索する API --- -半開区間 -[x, y) +半開区間 \ +[x, y) \ x を含み、y を含まない --- -[3, 7) +[3, 7) \ 3, 4, 5, 6 --- -ちょうど 5 +ちょうど 1 点を指定したい! + +--- + +ちょうど 5 \ [5, 6) --- -ちょうど n +ちょうど n \ [n, n+1) --- @@ -53,98 +103,188 @@ x を含み、y を含まない --- -ちょうど 1 -[1, 2) +ちょうど 1 \ +[1, 2) \ 1, 1.5, 1.7, 1.989 --- -[1, 1より少しだけ大きい値) +[1, 1より少しだけ大きい値) \ 間に 1 しか入らない範囲 +#pause + +可能か? + --- -[1, p) +[1, p) \ 間に 1 しか入らない範囲? +#pause + +$(1+p)/2$ が入る + --- -[1, p) -間に 1 しか入らない範囲? -(1+p)/2 が入る +実数では無理 + +#pause + +コンピュータ上の実数なら? --- -無理 (実数では) +コンピュータ上の実数表現は \ +有限精度 + +#pause + +あらゆる実数を表現できる \ +わけ*ではない* --- -実数は無限精度ある +[1, p) \ +間に 1 しか入らない範囲 + +#pause + +コンピュータ上なら \ +都合のいい p が存在する --- -コンピュータ上の実数表現は -有限精度 +ここからは *IEEE 754* を仮定 + +#pause + +#[ + #set text(size: 0.7em) + IEEE 754 + + 浮動小数点数の表現や扱いを定めた \ + 標準規格 +] --- -[1, p) +[1, p) \ +間に 1 しか入らない範囲 + +#pause + +p = 1.0000000000000002 + +#[ + #set text(size: 0.7em) + 64 bit の二進浮動小数点数の場合 +] --- -[1, p) -コンピュータ上なら -都合のいい p が存在する +#[ + #set text(size: 0.7em) + 1 = \ + 00111111111100000000000000000000... \ + ...00000000000000000000000000000000 +] + +#pause + +#[ + #set text(size: 0.7em) + p = \ + 00111111111100000000000000000000... \ + ...00000000000000000000000000000001 +] --- -64 bit の浮動小数点数の場合 -[1, p) +[1, p) \ p = 1.0000000000000002 +#pause + +[x, y) \ +y = ? + --- -1 = 0011111111110000000000000000000000000000000000000000000000000000 -p = 0011111111110000000000000000000000000000000000000000000000000001 +[x, y) \ +#[ + #set text(size: 0.8em) + y = + 64 bit の二進浮動小数点数で \ + 表現可能な値のうち、\ + x の*次*に大きい数 +] --- -浮動小数点数 IEEE 754 +#pause + +- nextUp +- nextDown + --- -IEEE 754 -nextUp -nextDown +[x, y) \ +間に x しか入らない範囲 + +#pause + +y = nextUp(x) --- -IEEE 754 -nextUp: 僅かに大きい値を返す -nextDown: 僅かに小さい値を返す +- C言語 + - `nextup()` + - `nextdown()` + - `nextafter()` --- -ちょうど x -[x, nextUp(x)) +- Java + - `Math.nextUp()` + - `Math.nextDown()` + - `Math.nextAfter()` --- -PHP には nextUp/nextDown が無い +PHP には \ +nextUp も nextDown も \ +無い! --- -無いので作りました -nsfisis/php-next-after +無いので作りました \ +#link("https://packagist.org/packages/nsfisis/next-after")[nsfisis/php-next-after] --- -```php -use Nsfisis\NextAfter\NextAfter; +#[ + #set text(size: 0.7em) -function toExactFloatRange($from) { - $to = NextAfter::nextUp($from); - return [$from, $to]; -} -``` + ```php + use Nsfisis\NextAfter\NextAfter; + + function toExactFloatRange( + float $from, + ): array { + $to = NextAfter::nextUp($from); + return [$from, $to]; + } + ``` +] + +--- + +#[ + #set align(center + horizon) + + ご静聴 \ + ありがとうございました +] |
