ç«¶ããã«ããã¦ããä½ãããã®æ´æ°ã大尿¯è¼ãã¦ã左辺ã大ãããã°ã©ãã®ããã®ãã¿ãããªãã¨ããããå±é¢ã¯ãããªãã«ããã¾ãã ç¹ã«ãå¢çä»è¿ã§ãæ£ç¢ºã«è©ä¾¡ã§ããå¿ è¦ãããç¶æ³ãå¤ãã§ãã ããããç¶æ³ã§æµ®åå°æ°ç¹æ°ã使ãã®ã¯ã§ããã ãé¿ãããã§ãã¨ããæ°æã¡ãããã¾ãã
å°å ¥
ã¾ããæµ®åå°æ°ç¹æ°ã¯èª¤å·®ãåºã¾ã*1ã
åå¿è ã®ãã¡ã¯ãæµ®åå°æ°ç¹æ°ã§ã¯ \(1\div 10\) ãæ£ç¢ºã«ã¯è¨ç®ã§ããªããã¨èãã¦ããããã¨ãã°
assert_eq!(1.0 / 10.0, 0.1);
ã¨ãã¯ã¨ã©ã¼ã«ãªããªãããåé¡ãªãè¨ç®ã§ãã¦ããã®ã§ã¯ï¼ãã¿ãããªèª¤è§£ããããã¨ãããã¾ãã
å®éã«ã¯ã0.1
ã¨æ¸ããé¨åãè¨ç®åã®æç¹ã§ 0.1000000000000000055511151231257827021181583404541015625
ã®ãããªå¤ã«ãªã£ã¦ãããææã®ç¶æ
ã«ã¯ãªã£ã¦ãã¾ããã
1.0 / 10.0
ãããããå¤ã«ãªã£ã¦ããããã¨ã©ã¼ã«ãªããªãã£ãã ãã§ããã
- ãããã表ããªã宿°ãï¼ããããï¼ãã
- 表ããæ°åå£«ã®æ¼ç®çµæã§ã表ããªãæ°ã«ãªããã¨ãï¼ããï¼ãã
ã¨ããã®ãã¡ããã¨æèããå¿ è¦ãããããããã¾ããã ãã¡ããã表ããªãã£ãæ°å士ã§è¨ç®ããçµæããã¾ãã¾ç¡é精度ã§ã®è¨ç®çµæã¨åãã«ãªããã¨ãããã¾ãã
assert_eq!(0.1 * 10.0, 1.0);
å®éã«ã¯ã0.1000000000000000055511151231257827021181583404541015625 * 10.0
ãè¨ç®ãããã¨ãã¦ã\(1.000000000000000055511151231257827021181583404541015625\) ã表ããã« 1.0
ã«ä¸¸ããããçµæãè¦ããä¸ã¯çãããªã£ã¦ããããã§ããã
ã¨ããããã§ 1.0 / 10.0 * 10.0 == 1.0
㯠true
ã§ããããã¨ãã° 1.0 / 49.0 * 49.0 == 1.0
㯠false
ã«ãªãã¾ãã
左辺㯠0.99999999999999988897769753748434595763683319091796875
ã®ãããªå¤ã«ãªã£ã¦ãã¾ãã
ã¾ããä»ã«ãããã話ã¨ã㦠0.1 + 0.2 != 0.3
ã¨ããã®ãããã¾ãã
誤差ãã©ã丸ãããã«ã¯ããã¤ãã®ã¢ã¼ããããã¾ãããã表ããæ°ã®ãã¡æãè¿ããã®ã«ä¸¸ãããã¡ããã©ä¸éã«ããå ´åã¯ãæãè¿ãå¶æ°ã®æ¹åã«ä¸¸ãããã¨ããï¼ããããï¼ãã®ãä»®å®ããã¨ã
0.1 => 0.1000000000000000055511151231257827021181583404541015625 0.2 => 0.200000000000000011102230246251565404236316680908203125 0.3 => 0.299999999999999988897769753748434595763683319091796875
ã¨ãªãã¾ãããå æ¸ä¹é¤ã«ã¤ãã¦ã¯ãç¡é精度ã§ã®æ¼ç®ããã¦ãã丸ããå¤ã¨çãããªããã¨ããããã«è¦å®ããã¦ããã®ã§ã0.1 + 0.2
ãããªãã¡ 0.100000000000000005551... + 0.200000000000000011102...
ãç¡é精度ã§è¨ç®ãã¦ãã丸ãã 0.3000000000000000444089...
ã®ããã«ãªãã0.3
ã丸ãã 0.299999999999999988897...
ã¨ã¯çãããªãã¾ãããã0.1 + 0.2
ã¨æ¸ãããã ããã2 鲿³ã¨ãã«ã¯ããã«æ¸ããæç¹ã®å¤ãç¡é精度ã§è¨ç®ãã¦ãã丸ãã¦ãããã¨ããã®ã¯ãã¤ããã§ã*2ã
0.1 + 0.2 => 0.3000000000000000444089209850062616169452667236328125
åã«ã¤ãã¦
double
ã f64
ã¨è¨ãããåã§ã©ã®ããã«æ°ã表ããã«ã¤ãã¦è§¦ãã¾ãã
IEEE 754 ã¨ããè¦æ ¼ã§ binary64 ã¨ãã¦å®ç¾©ããã¦ãããã®ã§ã*3ã
宿°ã®ä»ã« \(\infty\) ã«å¯¾å¿ããå¤ Infinity
ããéæ°ï¼å®ç¾©åå¤ã®å¤ã颿°ã«å
¥åããã¨ãã®è¿ãå¤ã«ãªã£ããããï¼ã«å¯¾å¿ããå¤ NaN
ãªã©ããããã®åã«ã¯å«ã¾ãã¾ããã䏿¦ãããã¯ç¡è¦ãã¾ã*4ã
ä¾ã¨ã㦠3.141592653589793115997963468544185161590576171875
ãæãã¾ããããã¯ä»¥ä¸ã®ãããªãããåã§è¡¨ããã¾ãã
0 10000000000 1001001000011111101101010100010001000010110100011000
ä¸ã¤ã«åãã¦æ¸ããé¨åããããã \( (s, e, b_{51} b_{50} \dots b_1 b_0)\) ã¨ããã¨ã次ã®å¼ã§è¡¨ãããå¤ã«å¯¾å¿ãã¾ãã \[ (-1)^s \cdot 2^{e-1023} \cdot (1.b_{51} b_{50} \dots b_1 b_0)_{(2)}. \] ã¤ã¾ãã以ä¸ã®ãããªæãã§ãã \[ \begin{aligned} {} &{\phantom{{}={}}} 2^{1024-1023} \cdot 1.1001001000011111101101010100010001000010110100011000_{(2)} \\ &= 2\cdot 1.1001001000011111101101010100010001000010110100011000_{(2)} \\ &= 2\cdot (1 + 2^{-1} + 2^{-4} + 2^{-7} + 2^{-12} + \dots + 2^{-48} + 2^{-49}) \\ &= 3.141592653589793115997963468544185161590576171875 \end{aligned} \]
ã¨ããããã§ãä¸çªä¸ã® \(1\) ãããæ¡ããè¦ã¦ \(52\) æ¡ä»¥ä¸é¢ãã \(1\) ããããããªæ° (\(2^k\cdot 1.\underbrace{00\dots 0}_{52}1_{(2)}\)) ããåå大ããæ° (\(2^{1024}\)) ãªã©ã¯è¡¨ããªããã¨ããããã¾ãããã®ãã¨ããå½ç¶ãæéå°æ°ã§ãªã宿°ã表ããªããã¨ããããã¾ãã\(2\) 鲿³ã«ãã㦠\(0.1_{(10)}\) ã¯æéå°æ°ã§ã¯ãªãããã\(0.1\) ã表ãã¾ããã
ãããããµã¤ãããã£ã¦ããªãµã¬ãª UI ã§éã¹ã¾ãã
æéå°æ°ã«ã¤ãã¦
\(b\) 鲿³ã§æ¢ç´åæ° \(p/q\) ãæéå°æ°ã¨ãªãæ¡ä»¶ã«ã¤ãã¦èãã¦ããã¾ããç°¡åã®ãã \(0\lt p/q\lt 1\) ã¨ãã¾ãã
ããæéã® \(k\) ã«ã¤ã㦠\[ p/q = (0.x_1 x_2\dots x_k)_{(b)} \] ã¨ããã¨ã両辺ã \(b^k\) åã㦠\[ b^k\cdot p/q = (x_1x_2\dots x_k)_{(b)} \] ã§ããããªãã¡ã\(b^k\cdot p/q\) ãæ´æ°ã«ãªãå¿ è¦ãããã¾ãã\(p\) 㨠\(q\) ã¯äºãã«ç´ ãªã®ã§ \(b^k/q\) ãæ´æ°ã«ãªãå¿ è¦ãããã¾ãã ãã®ã¨ããï¼\(b\) 㨠\(q\) ã®åç´ å æ°ã«ã¤ãã¦ç´åãã¦ããã¿ãããªãã¨ãèããã¨ï¼\(q\) ã®ç´ å æ°ã \(b\) ããã¹ã¦æã£ã¦ããå¿ è¦ãããã¾ãã éã«ã\(q\) ã®ç´ å æ°ã \(b\) ããã¹ã¦æã£ã¦ããã°ååã§ãã
\(0.1 = 1/10\) ã«é¢ãã¦ã¯ã\(10\) ã®ç´ å æ° \(5\) ã \(2\) ãæã£ã¦ããªãããã\(2\) 鲿³ã§ã¯è¡¨ããªãããã§ãã
å«ãªä¾
åç´ãªåæ°ã®æ¯è¼
ã\(x / y \le z / w\) ãï¼ (\(x, y, z, w\in \Z\cap[-10^2, 10^2]\), \(0\notin\{y, w\}\))ãã¨ããã®ãç¥ãããã±ã¼ã¹ã¯ã¾ãããããã¾ãã ããã¯ã忝ãæã£ã¦ \(xw\le yz\) ã¨ããã°æ´æ°ã§æ¯è¼ã§ãã¾ã*5ããæµ®åå°æ°ç¹æ°ã§è¨ç®ãã¦ãã¾ãåå¿è ã¯å¤ãã§ãã
ãã¼ã¼ã£ã¨èª¿ã¹ã¦ã¿ãæããhack ã§ããã±ã¼ã¹ã¯è¦ã¤ãããªãã£ãã®ã§ãããã³ã³ãã¹ãæ¬çªã§ä¸å®ã«ãªããªããæ¸ãããã¯ãªãã®ã§ãæ´æ°ã§ããããã§ãã
大ããæ´æ°ã®æ¯è¼
ã\(xy \ge z\) ãï¼ (\(x, y, z\in\Z\cap[0, 10^{18}]\))ãã¨ããã®ãç¥ãããã±ã¼ã¹ã¯ããããããã§ããããx * y
ããªã¼ãã¼ããã¼ããã®ã§æ´æ°ã§ãããããªãã¨æã£ã¦ãã¾ã人ãå¤ããã§ãã
fn f(x: i64, y: i64, z: i64) -> bool { let x = x as f64; let y = y as f64; let z = z as f64; x * y >= z }
ãã¨ãã°ã\(10^{18}-1 = 27027027\times 37000000037\not\ge 10^{18}\) ã§ãããf(27_027_027, 37_000_000_037, 10_i64.pow(18))
㯠true
ã«ãªã£ã¦ãã¾ãã¾ãã
左辺ã誤差㧠1_000_000_000_000_000_000.0
ã«ãªã£ã¦ãã¾ããçãããªã£ã¦ãã¾ããã§ããã
åèè¢ ãè¦ã¤ã¤ã\(x \ge \ceil{z/y}\) ã¨å¤å½¢ãã¾ãã\(y = 0\) ã«æ°ãã¤ãã¦ã
fn f(x: i64, y: i64, z: i64) -> bool { if y == 0 { z == 0 } else { x >= (z + y - 1) / y } }
ã®ããã«ãªãæ°ããã¾ãã
ãã£ã¨ããi128
ã®ãããªå¤§ããæ´æ°åã使ãã¨ããæãããã¾ãããå¶ç´ã \(10^{36}\) ã¨ãã ã£ããï¼ã¨èããã¨è¶£æ¨ã¯ä¼ããã¨æãã¾ãã
å°æ°ç¹ã®ç§»å
ãå°æ°ç¹ä»¥ä¸é«ã \(9\) æ¡ã®å®æ° \(0\lt x\lt 10^4\) ãä¸ãããã¾ãã\(10^9\cdot x\) ãåºåãã¦ããã¨ããã® ãèãã¾ãã
é©å½ã« 1.0e9
åãã¦å°ãè¶³ãã¦ããã°ããã§ãããã¿ãããªæ°æã¡ã«ãªã人ãå¤ãã¨æãã®ã§ããã
fn f(x: f64) -> i64 { (1.0e9 * x + 1.0e-6).floor() as i64 }
ãªã©ã¨æ¸ãã¨ãã¾ãããã¾ããã"32.000000001"
ãä¸ããããã¨ããããããã®ã¾ã¾ f64
ã«å¤æãã㨠32.00000000099999653002669219858944416046142578125
ã¨ãªãã32000000000.999996185302734375
ã¨ãªãã32000000000
ã¨ãªãã¾ãã
æååã¨ãã¦ããã°ã£ã¦å¦çãããã.round() as i64
ã®ããã«ããã®ãç¡é£ããã§ã*6ã
å¹³æ¹æ ¹ã®æ¯è¼
ããã¯æåãã\(\sqrt{a}+\sqrt{b}\lt\sqrt{c}\) ã§ããï¼ãã¨ãããã¤ã§ãã
解説 ãèªãã ããmaspy ããã®ãã¤ã¼ã ãèªãã ãã
ç´¯ä¹é¢é£
Rust ã ã¨æ´æ°ã«ã .pow()
ãç¨æããã¦ããã®ã§ããã¾ããªãããã§ãããC++ ã ã¨æµ®åå°æ°ç¹æ°ã«ããç¨æããã¦ããªãããããæ´æ°ã®ç´¯ä¹ããããã¨ãã«æµ®åå°æ°ç¹æ°ãä»ãã¦ãã¾ã人ãå¤ãã§ãã
ãéå \(S, T\) ãä¸ãããã¾ãã\(|S\cap T|\) ã¯ï¼ (\(S, T\subseteq\{0, 1, \dots, 62\}\))ãã¨ããã®ããã£ãã¨ãã
// C++ long long x = 0, y = 0; for (auto si: s) x += pow(2, si); for (auto ti: t) y += pow(2, ti); return __builtin_popcountll(x & y);
ã¿ãããªãã¨ãæ¸ãã¦ãã¾ã人ããã¾ããpow
ã double
ãè¿ãã®ã§ã以ä¸ã®ãããªå¤æãæé»ã«ãªããã¦ãã¾ãã
// x += pow(2, si); x = (long long)((double)x + pow(2, si));
ãã®çµæããã¨ãã° \(S = \{0, 53\}\) ã®ãããªã¨ããæå¾
ããå¤ã \(9007199254740993\) ãªã®ã«å¯¾ãã誤差ã®é¢ä¿ã§ x == 9007199254740992
ã«ãªã£ã¦ãã¾ãã¾ãã
x |= 1LL << si
ã®ããã«æ¸ãã®ãç¡é£ãªæ°ããã¾ããRust ã«ããã¦ã¯ x |= 1 << si
ã¨æ¸ãã¦ãåé¡ãªãã§ãã
Fibonacci æ°
\(n\) çªç® (\(1\le n\le 10^{18}\)) ã® Fibonacci æ°ã \(998244353\) ã§å²ã£ããã¾ããæ±ãã¦ããã¨è¨ããã¦ã\(F_n = (\sqrt{5})^{-1}\cdot (\phi^n-(-\phi^{-1})^n)\) ãæµ®åå°æ°ç¹æ°æ¼ç®ã§æ±ãããã¨ããåå¿è ãããæ°ããã¾ãã
ãã¨ãã° \(F_{72} = 498454011879264\) ã§ãããä¸å¼ããã®ã¾ã¾è¨ç®ããã¨ã498454011879265.2
ã¨ãã«ãªã£ã¦ãã¾ãããã§ãã
ãã£ã¡ ã¯ã®ã£ã°ã®è¨äºã
ãã£ã¨åç´ãªæ¯è¼ã§ hack ã§ããããªä¾ãåºãã¦åå¿è ãè ããããã£ããã§ãããããã®ãæãã¤ãã¾ããã§ãããã
sqrt
\(0\le n\le 10^{18}\) ã§ \(\floor{\sqrt{n}}\) ãæ±ãã¦ããã¨è¨ããã¦ãstd::sqrt(n)
ã¨æ¸ãã¨ã ãã§ãã
sqrt
ãæªãã¨ããããã¯ãdouble
ãåãåã颿°ã« long
ãæ¸¡ããéã«æé»ã«å夿ãèµ·ãã¦ããã®ãåå ãªã®ã§ããã
ãã¨ãã° \(n = 2^{54}-1\) ã®ã¨ããdouble
ã§ã¯ \(2^{54}\) ã«ä¸¸ãããã\(2^{27}\) ãè¿ãããããã¾ããå®éã«ã¯ \(\floor{\sqrt{n}} = 2^{27}-1\) ãªã®ã§åã«ãªãã¾ããã
å¹³æ¹æ°ããå°ãå°ããæ´æ°ã§ãä¸ã«ä¸¸ãããã¦ãã®å¹³æ¹æ°ä»¥ä¸ã«ãªãã±ã¼ã¹ã§ããã°ããªãã§ã hack ã§ããã¨æãã¾ãã
ææ°æ¢ç´¢ãªãäºåæ¢ç´¢ãªã Newton æ³ãªãæ´æ°ã§ããæ¹éã«ããããdouble
ã§è¿ã£ã¦ããå¤ã®å¨è¾ºãç·å½¢æ¢ç´¢ããæ¹éãããããã§ãã
ãã¾ã
ããã¯ãæ´æ°ã使ãã°ããã§ãããç³»ã¨ã¯éã£ã¦ããããããä¾ãããã¾ããå«ã§ãããã¿ãããªã®ãç´¹ä»ããã³ã¼ãã¼ã§ãã
誤差ã®ããã§å®ç¾©åãè¶ ãããã¤
æ¢ãã¦ä½ã£ããããªä¾ã§ãããã\(x\) ãä¸ãããã¾ãã\(\sqrt{\sin(\pi x)}\) ãåºåãã¦ããã¨ããåé¡ãèãã¾ãã\(x = 2\) ã®ã¨ããªã©ã«ãã¾ãããã¾ããã
use std::f64::consts::PI; fn main() { println!("{:.50}", (2.0 * PI)); println!("{}", (2.0 * PI).sin()); println!("{}", (2.0 * PI).sin().sqrt()); }
以ä¸ã®ãããªåºåã«ãªãã¾ãã
6.28318530717958623199592693708837032318115234375000 -0.00000000000000024492935982947064 NaN
0.0
ã«ãªã£ã¦ãããã§ããã¨ããã®ã¯æãè¾¼ã¿ãªããã§ããã
\(2\pi = \tau\) ã表ã宿° TAU
ãç¨æããã¦ãã¾ãããTAU.sin().sqrt()
ã NaN
ã«ãªãã¾ãã
ä»ã«ããasin
(\(\arcsin\)) ã®å¼æ°ã 1.0
ãããããã«å¤§ããã£ãã¨ãã NaN
ã«ãªã£ãããã¾ãã
å®ç¾©åã \( (-\infty, \infty)\) ã§ãªã颿°*7ã使ãã¨ãã¯ç¹ã«æ°ãã¤ãã¾ãããã
æå³ããªãæãã«ä¸¸ãããããã¤
ãããæ¢ãã¦ä½ã£ãä¾ã§ããã\(1\le x\le 9007199254740995\) ãä¸ãããã¾ãã\(1/(9007199254740996-x)\) ãåºåãã¦ããã¨ããåé¡ãèãã¾ãã
x = 9007199254740995.0
ã¨ããã¨ãx == 9007199254740996.0
ã¨ãªãããã«ä¸¸ãããã1.0 / 0.0 == Infinity
ã¨ãªãã¾ãã
ç´°ãããã¤
\(1 / 3\) 㯠2 鲿³ã§æéå°æ°ã«ã¯ãªããªãã®ã§ã\(\sqrt[3]{x} = x^{1/3}\) ã¨æã£ã¦è¨ç®ããã¨å°ãããããã¨ãããã¾ãã
println!("{:.050}", 5.0_f64.cbrt()); // 1.70997594667669705614798658643849194049835205078125 println!("{:.050}", 5.0_f64.powf(1.0 / 3.0)); // 1.70997594667669683410338166140718385577201843261719
ç«¶ããã®ç¯å²ã§ãããåé¡ã«ãªããã¨ã¯å°ãªãããã§ãããé ã®çé ã«ç½®ãã¦ããã¦ãããã§ãããã
丸ãã«é¢ãã¦
å æ¸ä¹é¤ã«ã¤ãã¦ã¯ãç¡éç²¾åº¦ã®æ¼ç®çµæã丸ãããã®ããã«æ¯ãèã£ã¦ããã¾ãã
FMA (fused multiply-add; \(xy+z\)) ã¨ããã®ããã£ã¦ã丸ããä¸åº¦ããè¡ããªããã®ã¨ãã¦å®ç¾©ããã¦ãã¾ãããæ£ãããªãçµæãè¿ãå®è£ ã ããããã ã§ãã
ãã以å¤ã®é¢æ° (\(\sin(x)\), \(\sqrt{x}\), \(x/y\), etc.) ã«ã¤ãã¦ã¯ã©ãã§ããããã IEEE 754-2019 ã§ã¯ required operations 㨠recommended operations ã¨ããæ ãåããã¦ãã¦ãå æ¸ä¹é¤ãªã©ã¯åè ã\(\sin\) ãªã©ã¯å¾è ã«å«ã¾ãã¦ãã¾ã*8ã å¾è ãç¡éç²¾åº¦ã®æ¼ç®çµæã丸ãããã®ããã«ããã¹ãã¨æ¸ããã¦ãã¾ãããrequired ã§ã¯ãªãã®ã§ããã£ã¨ããæããããæ°ããã¾ããå®éãGCC ã¯ä¸é¨ãé¤ãã¦ç¹ã«ã¡ããã¨ãããã¨ã¯ç®æãã¦ããªã ãããã§ãã
table makerâs dilemma ã¨ãã調ã¹ãã¨ãããããLindemann ã®å®ç ã¨ããé¢é£ãã¦ãããã é¢é£ãã¦ãããªè³æããã ã¨ã ãã ã¨ãã
詳ãã人ã®ãã¤ã¼ãï¼
Cè¨èªã®å ´åã¯sinã¨ãã®æ°å¦é¢æ°ãããããIEEEæºæ ãã¨ããåé¡ããã£ã¦ãIEEE754ãè¦ã«è¡ãåã«Cã®è¦æ ¼ã確èªããã¹ããã¿ãããªè©±ãããï¼Cã®å¦çç³»ãAnnex Fæºæ ãªãsqrtã¨ãremainderã¯æ£ãã丸ãããããã¨ãä¿è¨¼ããããã©ãsinã¯ä¿è¨¼ãããªãï¼ https://t.co/Woml3ZkagN
— mod_poppo (@mod_poppo) 2022å¹´6æ4æ¥
ãã®ä»
ããããã㨠x < y + eps
(eps = 1e-8
) ã¿ããã«ããã¨ããã¨ããèãããã¨ããã人ãããããããã¾ããã
ããã¯ã©ããã¦ãæµ®åå°æ°ç¹æ°ã使ãå¿
è¦ãããå ´é¢ã§é©åã«ä½¿ãã¹ãã§ãã£ã¦ãæ´æ°ã«å¸°çã§ããåé¡ã§ã¯ãããªãæ¹ãç¡é£ããã§ãã
æ ¹æ¬çã«ééã£ãè§£æ³ã®å ´åã§ããeps
ãå¤ããã°éãããããªã©ã¨è¨ã£ã¦ç¡é§ã«èª¤çãåºããã¨ã«ãã¤ãªãããã¡ã§ãã
ã¾ããå¹¾ä½ãå¹¾ä½ä»¥å¤ã®åé¡ãªã©ã§åæ°ãæ±ãå ´åã«ããã¦ããé©å½ãªç´ æ° \(p\) ãç¨ãã¦ã\(x/y\) ã \(x\cdot y^{-1}\bmod p\) ã¨ãã¦è¡¨ãã¨ããã±ã¼ã¹ãããã¾ãã(åé¡ / 解説) (åé¡ / 解説)
ãã¨æµ®åå°æ°ç¹æ°ã«ããã¦ã¯ãåå¿è ã®ãã¡ã«ããªããããã§ãã¾ãããããï¼ããã¤ãã®ã±ã¼ã¹ã§ã¯ãã¾ããã£ãï¼ãã¨æã£ããã®ã«ã¯ãåä¾ãããããããæ°ããã¾ãã ããããæ¹æ³ã使ã£ã¦ç¥ãããã¯ãï¼ååã«åå¼·ãã¦ç¥ãã使ããï¼æ´æ°ã«å¸°çããæ¹æ³ãèããã®ãè³¢æããã§ãã
é¢é£åé¡
æµ®åå°æ°ç¹æ°ãé¿ãã¦ãããããªãã¨ãªãåé¡ãæãã¦ããã¾ããæµ®åå°æ°ç¹æ°ã§ãã£ã¦åé¡ããããã©ããã¯æ°ã«ãã¦ããªãã®ã§ãåé¡ããªãå ´åã§ãæ´æ°ã§ããç·´ç¿ã¨ãã¦ããã¨ããã§ãããã
- ABC 169 C
- ABC 226 A
- ABC 238 A
- å
¥åã
1e160
ãããã¾ã§ããå ´åã¨ããèãã¦ã¿ã¦ãã ããã
- å
¥åã
- ABC 191 D
- ABC 205 A
ä»ã«ãããæãã®ããã£ããåéãã¦ãã¾ãã
è¨ç®ã«é¢ãã¦
æµ®åå°æ°ç¹æ°ã®æ°å¦é¢æ°ã®å®è£ ãè¼ã£ã¦ãã¾ãã ãã¼ãã¦ã§ã¢ã®ãµãã¼ããå¾ãããªãç¶æ³ãæ³å®ãã¦æ¸ããã¦ãããã§ãå¤ãã®ç¶æ³ã§ã¯ãã¼ãã¦ã§ã¢å½ä»¤ã§å¦çããã¦ããããªæ°ããã¾ãã
è¿ä¼¼ã¨ããããã°ã£ãããã¦ãããã§ãã
ãã®è¾ºã¯ãä¸å¿ è¦ã«ããã®æèã¨ã¯éãããã§ãããã¤ãã§ã«è¼ãã¡ããã¾ããã
便å©ã¡ããï¼
èª¤å·®ãæ¸ãããã«å¼å¤å½¢ãã¦ããããããã§ãã
ããã
ãããã§ãã
*1:誤差以å¤ãããããåºããã¨æãã°åºãããããã¾ããã
*2:ã³ã³ãã¤ã«æã®æé©åã«ãã£ã¦ã¯èµ·ãããï¼ ãªãã·ã§ã³ã¨ãã«ããããããC/C++ ã§ã¯ã³ã³ãã¤ã«æã¨å®è¡æã§ç²¾åº¦ãä¸¸ãæ¹ãå¤ããã®ã許容ããã¿ãããªè©±ãã©ããã«ãã£ããããªæ°ãããã®ã§ã¾ã調ã¹ã¾ããæé©åã§èª¤å·®é¢é£ã®æåãå¤ãã¦ããããã¼ã¿ãããªãªãã·ã§ã³ã¯ãã£ãã¯ãã
*3:Rust ã¯ããã£ã½ããã© C++ ã¯å¿ ãããããã§ã¯ãªããããGCC ã§ã¯ãµãã¼ããã¦ãããããããããªãå¦çç³»ããããã¯ç¥ããªããã©è¦æ ¼ä¸ã¯è¨±å®¹ããã¦ãããã
*4:ããã«ã鿣è¦åæ°ã¨ããã®ãããã¾ãããç¡è¦ãã¾ãã
*5:ã¨ããã®ã¯åã§ã\(yw\) ã®ç¬¦å·ã«æ°ãã¤ãã¾ãããã
*6:åä¾ãè¦ã¤ãããæãã¦ãã ããã
*7:binary64 ã¯ç¡é大ãã¡ãå«ãã®ã§ \([-\infty, \infty]\) ããã
*8:å¤ãã®ã¯ç¢ºèªãã¦ããªãã®ã§ããã彿ã¯ãªãã£ãããã ã§ãï¼ ãã¶ãã