Skip to content

Centipawn conversion #860

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
May 26, 2019
Merged

Centipawn conversion #860

merged 4 commits into from
May 26, 2019

Conversation

AlexisOlson
Copy link
Contributor

@AlexisOlson AlexisOlson commented May 24, 2019

Non-tangent version of the formula that should fit better near the asymptotes and a better fitting slope near the origin.

Wide

Narrow

This conversion formula should be a better match near the asymptotes.
@AlexisOlson
Copy link
Contributor Author

AlexisOlson commented May 24, 2019

I'm not positive the best way to handle the case x = +/- 1 (divide by zero error). Maybe multiply x^16 in the denominator by something close to 1 (e.g. 0.999)?

Edit: The fix is to solve for max score = +128, which is what we are used to seeing. Note the following commit.

This coefficient makes the max score top out near +128 (12826 cp, more precisely).

This also fixes the divide-by-zero problem at x = +/- 1.
@zz4032
Copy link
Contributor

zz4032 commented May 25, 2019

New data with columns: Q (from LC0-eval) / LC0-eval (win_percentage) / SF-eval / LC0-eval with cp formula (current) / LC0-eval with cp formula (old)
https://pastebin.com/PgRKTNv1

Description:
Evaluations were done with LC0-dev (JH's 610 net) at 4s/position (~100Knodes) and asmFish at 8s/position (with Contempt: 0), both with TBs, being roughly equal in strength at these calculation times on my hardware. Positions were picked from lichess human games with Elo > 2100 for both players, not considering games with less than 10 moves, one position/game from a randomly chosen ply in each game (excluding positions where SF found a mate sequence).

The formula cp(Q) = factor * Q / ( 1 - Q^exponent ) from @AlexisOlson looks much better than the current tan formula. With additional condition of cp(Q=1.0) = 12800cp: cp(Q) = factor * Q / ( 1 - (1-factor/12800) * Q^exponent ).

I tried least-square fitting on the new formula above, but didn't like the result. My proposal would be what looks best visually for me: cp(Q) = 290 * Q / ( 1 - 0.977344 * Q^12 ).
First parameter (290) is controlling the slope, the exponent (12) controls the sharpness of the "hockey stick" corner. First priority was having a similar slope as SF eval in the Q range [-0.7;0.7], second having a curvature resembling SF's eval well enough for Q range [-1.0;-0.7] and [0.7;1.0], but not too sharply cornered.
01
02
"Winrate" axis in diagrams is actually "Q".

@QxC4eva
Copy link
Contributor

QxC4eva commented May 25, 2019

Nice graphs and the new formula looks promising! I was wondering if other hardware or time settings were tested to confirm if the shapes are similar, and that we're not overfitting to a specific hardware/setting? That's from having noticed a dip when I tried it on TCEC 15 games (higher evals look better though).

Post Compare

I suppose another thing to know would be how well Leela's Q value predicts Stockfish's win probability.

@zz4032
Copy link
Contributor

zz4032 commented May 25, 2019

I don't think it's a good idea to derive the formula or test it on Leela's or SF's games. Each engine would overestimate it's own position more or less.

@AlexisOlson
Copy link
Contributor Author

With the additional data points @zz4032 provided, the best fit for the exponent is 14. 295 still looks to be a good fit for the middle.

My proposal is cp(winrate) = 295 * winrate / ( 1 - 0.977344 * winrate^14 ), but anything in that vicinity is fine.

The coefficient 0.976953125 = 1 - 295/12800.
@mooskagh
Copy link
Member

Looks good to me. Will wait for a day or so for objections and merge.
Then it will either go directly to v0.21.2, or more likely it will be v0.21.2-rc3 so that people could test before making that new official conversion.

Is it easily reversable? (for TCEC chat)

@AlexisOlson
Copy link
Contributor Author

@mooskagh, It's easily reversible, sure. Just a single formula change. The diff is minimal:

https://github.com/LeelaChessZero/lc0/pull/860/files/7296a830d602c1d146ccacfd968527c0a9d8e3de

@mooskagh
Copy link
Member

I meant whether it's easy to get inverse function (from centipawns back to Q, TCEC chat likes to recompute Q back from centipawn output).

@AlexisOlson
Copy link
Contributor Author

@mooskagh Ah, that makes more sense. Unfortunately, the inverse function is nontrivial and I haven't yet found a decent approximation to the inverse that's simple to calculate.

Note to self: This is Mathematica's 'solution'.

Reduce[295 x / (1 - (1-295/12800) x^14) == y && x <= 1&& x>= -1, x, Reals]
=
(-12800 <= y <= 0 && x == Root[-2560 y + 755200 #1 + 2501 y #1^14&, 1])
||(0 < y <= 12800 && x == Root[-2560 y + 755200 #1 + 2501 y #1^14&, 2])

@zz4032
Copy link
Contributor

zz4032 commented May 25, 2019

To be precise, with 295 the factor in the formula should be changed: cp(Q) = 295 * Q / ( 1 - 0.976953125 * Q^14 )

Can TCEC use something like a lookup-table? Taking eval closest to one from the table and show the equivalent winrate:

Eval	Q
128.00	100%
19.31	 99%
10.96	 98%
7.90	 97%
6.32	 96%
5.35	 95%
4.71	 94%
4.24	 93%
3.90	 92%
3.63	 91%
3.42	 90%
...

Edit: I noticed that what I called "winrate" in tables and diagrams is actually Q.

@AlexisOlson
Copy link
Contributor Author

@zz4032
Yeah, that works. Here's the full table between evals -10 and +10 of Centipawns to Win%:
https://pastebin.com/jc4K0wuu

And here's a coarser set from -128 to +128:
https://pastebin.com/GPxKzu9C

And for good measure, the reverse mapping of Win% to Centipawns:
https://pastebin.com/f8DvuAwb

@AySz88
Copy link

AySz88 commented May 26, 2019

For inverting, Newton's method works great - five or so iterations are more than enough, if you're careful to start a bit larger (further from Q=0) than the value you're converging to.

Initial guess x_0 = table lookup, erring towards higher abs(eval)

x_(n + 1) = x_n - ((295 x_n)/(1 - 0.976953 x_n^14) - CP)/((4034.82 x_n^14)/(1 - 0.976953 x_n^14)^2 + 295/(1 - 0.976953 x_n^14))

Take Q = x_5

If you take out the table lookup and just guess 0 crudely, you need to add a check if it tries to take the first iteration out of bounds (force it back to +/-1), and a stop condition based on the sizes of the step it took. There are pathological cases where you need a lot of iterations but it's usually under 15 or so.

(Grabbed the iteration equation from Wolfram Alpha here)

@mooskagh
Copy link
Member

I don't think any iterative approach (rather than one-line formula approximation) will be suitable for TCEC, but anyway, let's merge it for now. :)

@mooskagh mooskagh merged commit aed1fc9 into LeelaChessZero:master May 26, 2019
mooskagh pushed a commit that referenced this pull request Jun 8, 2019
* Non-tangent Centipawn Conversion 

This conversion formula should be a better match near the asymptotes.

* Added coefficient to the denominator

This coefficient makes the max score top out near +128 (12826 cp, more precisely).

This also fixes the divide-by-zero problem at x = +/- 1.

* Exponent tweak and coefficient precision

The coefficient 0.976953125 = 1 - 295/12800.
@Mardak
Copy link
Contributor

Mardak commented Jun 8, 2019

If someone wants a single line expression to convert a cp variable to a win with precision of 1 digit after decimal, e.g.,

cp win
-10000 0
-1000 1.1
-100 33
-10 48.3
-1 49.8
0 50
1 50.2
10 51.7
100 66.9
1000 98.9
10000 100
# javascript
win = .1 * (cp < -8043 ? 0 : cp < -4646 ? 1 : cp < -3288 ? 2 : cp < -2556 ? 3 : cp < -2099 ? 4 : cp < -1787 ? 5 : cp < -1560 ? 6 : cp < -1387 ? 7 : cp < -1251 ? 8 : cp < -1142 ? 9 : cp < -1052 ? 10 : cp < -977 ? 11 : cp < -913 ? 12 : cp < -858 ? 13 : cp < -811 ? 14 : cp < -769 ? 15 : cp < -732 ? 16 : cp < -699 ? 17 : cp < -669 ? 18 : cp < -643 ? 19 : cp < -619 ? 20 : cp < -597 ? 21 : cp < -577 ? 22 : cp < -559 ? 23 : cp < -542 ? 24 : cp < -527 ? 25 : cp < -512 ? 26 : cp < -499 ? 27 : cp < -487 ? 28 : cp < -475 ? 29 : cp < -464 ? 30 : cp < -454 ? 31 : cp < -445 ? 32 : cp < -436 ? 33 : cp < -428 ? 34 : cp < -420 ? 35 : cp < -412 ? 36 : cp < -405 ? 37 : cp < -398 ? 38 : cp < -392 ? 39 : cp < -386 ? 40 : cp < -380 ? 41 : cp < -375 ? 42 : cp < -370 ? 43 : cp < -365 ? 44 : cp < -360 ? 45 : cp < -355 ? 46 : cp < -351 ? 47 : cp < -347 ? 48 : cp < -343 ? 49 : cp < -339 ? 50 : cp < -335 ? 51 : cp < -332 ? 52 : cp < -328 ? 53 : cp < -325 ? 54 : cp < -322 ? 55 : cp < -319 ? 56 : cp < -316 ? 57 : cp < -313 ? 58 : cp < -311 ? 59 : cp < -308 ? 60 : cp < -305 ? 61 : cp < -303 ? 62 : cp < -301 ? 63 : cp < -298 ? 64 : cp < -296 ? 65 : cp < -294 ? 66 : cp < -292 ? 67 : cp < -290 ? 68 : cp < -288 ? 69 : cp < -286 ? 70 : cp < -284 ? 71 : cp < -282 ? 72 : cp < -280 ? 73 : cp < -279 ? 74 : cp < -277 ? 75 : cp < -275 ? 76 : cp < -274 ? 77 : cp < -272 ? 78 : cp < -271 ? 79 : cp < -269 ? 80 : cp < -268 ? 81 : cp < -266 ? 82 : cp < -265 ? 83 : cp < -263 ? 84 : cp < -262 ? 85 : cp < -261 ? 86 : cp < -260 ? 87 : cp < -258 ? 88 : cp < -257 ? 89 : cp < -256 ? 90 : cp < -255 ? 91 : cp < -254 ? 92 : cp < -252 ? 93 : cp < -251 ? 94 : cp < -250 ? 95 : cp < -249 ? 96 : cp < -248 ? 97 : cp < -247 ? 98 : cp < -246 ? 99 : cp < -245 ? 100 : cp < -244 ? 101 : cp < -243 ? 102 : cp < -242 ? 103 : cp < -241 ? 104 : cp < -240 ? 105 : cp < -239 ? 106 : cp < -238 ? 108 : cp < -237 ? 109 : cp < -236 ? 110 : cp < -235 ? 111 : cp < -234 ? 112 : cp < -233 ? 113 : cp < -232 ? 115 : cp < -231 ? 116 : cp < -230 ? 117 : cp < -229 ? 118 : cp < -228 ? 120 : cp < -227 ? 121 : cp < -226 ? 122 : cp < -225 ? 124 : cp < -224 ? 125 : cp < -223 ? 126 : cp < -222 ? 128 : cp < -221 ? 129 : cp < -220 ? 130 : cp < -219 ? 132 : cp < -218 ? 133 : cp < -217 ? 135 : cp < -216 ? 136 : cp < -215 ? 138 : cp < -214 ? 139 : cp < -213 ? 140 : cp < -212 ? 142 : cp < -211 ? 143 : cp < -210 ? 145 : cp < -209 ? 147 : cp < -208 ? 148 : cp < -207 ? 150 : cp < -206 ? 151 : cp < -205 ? 153 : cp < -204 ? 154 : cp < -203 ? 156 : cp < -202 ? 157 : cp < -201 ? 159 : cp < -200 ? 161 : cp < -199 ? 162 : cp < -198 ? 164 : cp < -197 ? 165 : cp < -196 ? 167 : cp < -195 ? 169 : cp < -194 ? 170 : cp < -193 ? 172 : cp < -192 ? 174 : cp < -191 ? 175 : cp < -190 ? 177 : cp < -189 ? 178 : cp < -188 ? 180 : cp < -187 ? 182 : cp < -186 ? 183 : cp < -185 ? 185 : cp < -184 ? 187 : cp < -183 ? 188 : cp < -182 ? 190 : cp < -181 ? 192 : cp < -180 ? 193 : cp < -179 ? 195 : cp < -178 ? 197 : cp < -177 ? 198 : cp < -176 ? 200 : cp < -175 ? 202 : cp < -174 ? 203 : cp < -173 ? 205 : cp < -172 ? 207 : cp < -171 ? 208 : cp < -170 ? 210 : cp < -169 ? 212 : cp < -168 ? 214 : cp < -167 ? 215 : cp < -166 ? 217 : cp < -165 ? 219 : cp < -164 ? 220 : cp < -163 ? 222 : cp < -162 ? 224 : cp < -161 ? 225 : cp < -160 ? 227 : cp < -159 ? 229 : cp < -158 ? 230 : cp < -157 ? 232 : cp < -156 ? 234 : cp < -155 ? 235 : cp < -154 ? 237 : cp < -153 ? 239 : cp < -152 ? 241 : cp < -151 ? 242 : cp < -150 ? 244 : cp < -149 ? 246 : cp < -148 ? 247 : cp < -147 ? 249 : cp < -146 ? 251 : cp < -145 ? 252 : cp < -144 ? 254 : cp < -143 ? 256 : cp < -142 ? 257 : cp < -141 ? 259 : cp < -140 ? 261 : cp < -139 ? 263 : cp < -138 ? 264 : cp < -137 ? 266 : cp < -136 ? 268 : cp < -135 ? 269 : cp < -134 ? 271 : cp < -133 ? 273 : cp < -132 ? 274 : cp < -131 ? 276 : cp < -130 ? 278 : cp < -129 ? 280 : cp < -128 ? 281 : cp < -127 ? 283 : cp < -126 ? 285 : cp < -125 ? 286 : cp < -124 ? 288 : cp < -123 ? 290 : cp < -122 ? 291 : cp < -121 ? 293 : cp < -120 ? 295 : cp < -119 ? 296 : cp < -118 ? 298 : cp < -117 ? 300 : cp < -116 ? 302 : cp < -115 ? 303 : cp < -114 ? 305 : cp < -113 ? 307 : cp < -112 ? 308 : cp < -111 ? 310 : cp < -110 ? 312 : cp < -109 ? 313 : cp < -108 ? 315 : cp < -107 ? 317 : cp < -106 ? 318 : cp < -105 ? 320 : cp < -104 ? 322 : cp < -103 ? 324 : cp < -102 ? 325 : cp < -101 ? 327 : cp < -100 ? 329 : cp < -99 ? 330 : cp < -98 ? 332 : cp < -97 ? 334 : cp < -96 ? 335 : cp < -95 ? 337 : cp < -94 ? 339 : cp < -93 ? 341 : cp < -92 ? 342 : cp < -91 ? 344 : cp < -90 ? 346 : cp < -89 ? 347 : cp < -88 ? 349 : cp < -87 ? 351 : cp < -86 ? 352 : cp < -85 ? 354 : cp < -84 ? 356 : cp < -83 ? 357 : cp < -82 ? 359 : cp < -81 ? 361 : cp < -80 ? 363 : cp < -79 ? 364 : cp < -78 ? 366 : cp < -77 ? 368 : cp < -76 ? 369 : cp < -75 ? 371 : cp < -74 ? 373 : cp < -73 ? 374 : cp < -72 ? 376 : cp < -71 ? 378 : cp < -70 ? 380 : cp < -69 ? 381 : cp < -68 ? 383 : cp < -67 ? 385 : cp < -66 ? 386 : cp < -65 ? 388 : cp < -64 ? 390 : cp < -63 ? 391 : cp < -62 ? 393 : cp < -61 ? 395 : cp < -60 ? 396 : cp < -59 ? 398 : cp < -58 ? 400 : cp < -57 ? 402 : cp < -56 ? 403 : cp < -55 ? 405 : cp < -54 ? 407 : cp < -53 ? 408 : cp < -52 ? 410 : cp < -51 ? 412 : cp < -50 ? 413 : cp < -49 ? 415 : cp < -48 ? 417 : cp < -47 ? 418 : cp < -46 ? 420 : cp < -45 ? 422 : cp < -44 ? 424 : cp < -43 ? 425 : cp < -42 ? 427 : cp < -41 ? 429 : cp < -40 ? 430 : cp < -39 ? 432 : cp < -38 ? 434 : cp < -37 ? 435 : cp < -36 ? 437 : cp < -35 ? 439 : cp < -34 ? 441 : cp < -33 ? 442 : cp < -32 ? 444 : cp < -31 ? 446 : cp < -30 ? 447 : cp < -29 ? 449 : cp < -28 ? 451 : cp < -27 ? 452 : cp < -26 ? 454 : cp < -25 ? 456 : cp < -24 ? 457 : cp < -23 ? 459 : cp < -22 ? 461 : cp < -21 ? 463 : cp < -20 ? 464 : cp < -19 ? 466 : cp < -18 ? 468 : cp < -17 ? 469 : cp < -16 ? 471 : cp < -15 ? 473 : cp < -14 ? 474 : cp < -13 ? 476 : cp < -12 ? 478 : cp < -11 ? 480 : cp < -10 ? 481 : cp < -9 ? 483 : cp < -8 ? 485 : cp < -7 ? 486 : cp < -6 ? 488 : cp < -5 ? 490 : cp < -4 ? 491 : cp < -3 ? 493 : cp < -2 ? 495 : cp < -1 ? 496 : cp < 0 ? 498 : cp < 1 ? 500 : cp < 2 ? 502 : cp < 3 ? 503 : cp < 4 ? 505 : cp < 5 ? 507 : cp < 6 ? 508 : cp < 7 ? 510 : cp < 8 ? 512 : cp < 9 ? 513 : cp < 10 ? 515 : cp < 11 ? 517 : cp < 12 ? 518 : cp < 13 ? 520 : cp < 14 ? 522 : cp < 15 ? 524 : cp < 16 ? 525 : cp < 17 ? 527 : cp < 18 ? 529 : cp < 19 ? 530 : cp < 20 ? 532 : cp < 21 ? 534 : cp < 22 ? 535 : cp < 23 ? 537 : cp < 24 ? 539 : cp < 25 ? 541 : cp < 26 ? 542 : cp < 27 ? 544 : cp < 28 ? 546 : cp < 29 ? 547 : cp < 30 ? 549 : cp < 31 ? 551 : cp < 32 ? 552 : cp < 33 ? 554 : cp < 34 ? 556 : cp < 35 ? 557 : cp < 36 ? 559 : cp < 37 ? 561 : cp < 38 ? 563 : cp < 39 ? 564 : cp < 40 ? 566 : cp < 41 ? 568 : cp < 42 ? 569 : cp < 43 ? 571 : cp < 44 ? 573 : cp < 45 ? 574 : cp < 46 ? 576 : cp < 47 ? 578 : cp < 48 ? 580 : cp < 49 ? 581 : cp < 50 ? 583 : cp < 51 ? 585 : cp < 52 ? 586 : cp < 53 ? 588 : cp < 54 ? 590 : cp < 55 ? 591 : cp < 56 ? 593 : cp < 57 ? 595 : cp < 58 ? 596 : cp < 59 ? 598 : cp < 60 ? 600 : cp < 61 ? 602 : cp < 62 ? 603 : cp < 63 ? 605 : cp < 64 ? 607 : cp < 65 ? 608 : cp < 66 ? 610 : cp < 67 ? 612 : cp < 68 ? 613 : cp < 69 ? 615 : cp < 70 ? 617 : cp < 71 ? 618 : cp < 72 ? 620 : cp < 73 ? 622 : cp < 74 ? 624 : cp < 75 ? 625 : cp < 76 ? 627 : cp < 77 ? 629 : cp < 78 ? 630 : cp < 79 ? 632 : cp < 80 ? 634 : cp < 81 ? 635 : cp < 82 ? 637 : cp < 83 ? 639 : cp < 84 ? 641 : cp < 85 ? 642 : cp < 86 ? 644 : cp < 87 ? 646 : cp < 88 ? 647 : cp < 89 ? 649 : cp < 90 ? 651 : cp < 91 ? 652 : cp < 92 ? 654 : cp < 93 ? 656 : cp < 94 ? 657 : cp < 95 ? 659 : cp < 96 ? 661 : cp < 97 ? 663 : cp < 98 ? 664 : cp < 99 ? 666 : cp < 100 ? 668 : cp < 101 ? 669 : cp < 102 ? 671 : cp < 103 ? 673 : cp < 104 ? 674 : cp < 105 ? 676 : cp < 106 ? 678 : cp < 107 ? 680 : cp < 108 ? 681 : cp < 109 ? 683 : cp < 110 ? 685 : cp < 111 ? 686 : cp < 112 ? 688 : cp < 113 ? 690 : cp < 114 ? 691 : cp < 115 ? 693 : cp < 116 ? 695 : cp < 117 ? 696 : cp < 118 ? 698 : cp < 119 ? 700 : cp < 120 ? 702 : cp < 121 ? 703 : cp < 122 ? 705 : cp < 123 ? 707 : cp < 124 ? 708 : cp < 125 ? 710 : cp < 126 ? 712 : cp < 127 ? 713 : cp < 128 ? 715 : cp < 129 ? 717 : cp < 130 ? 718 : cp < 131 ? 720 : cp < 132 ? 722 : cp < 133 ? 724 : cp < 134 ? 725 : cp < 135 ? 727 : cp < 136 ? 729 : cp < 137 ? 730 : cp < 138 ? 732 : cp < 139 ? 734 : cp < 140 ? 735 : cp < 141 ? 737 : cp < 142 ? 739 : cp < 143 ? 741 : cp < 144 ? 742 : cp < 145 ? 744 : cp < 146 ? 746 : cp < 147 ? 747 : cp < 148 ? 749 : cp < 149 ? 751 : cp < 150 ? 752 : cp < 151 ? 754 : cp < 152 ? 756 : cp < 153 ? 757 : cp < 154 ? 759 : cp < 155 ? 761 : cp < 156 ? 763 : cp < 157 ? 764 : cp < 158 ? 766 : cp < 159 ? 768 : cp < 160 ? 769 : cp < 161 ? 771 : cp < 162 ? 773 : cp < 163 ? 774 : cp < 164 ? 776 : cp < 165 ? 778 : cp < 166 ? 779 : cp < 167 ? 781 : cp < 168 ? 783 : cp < 169 ? 784 : cp < 170 ? 786 : cp < 171 ? 788 : cp < 172 ? 790 : cp < 173 ? 791 : cp < 174 ? 793 : cp < 175 ? 795 : cp < 176 ? 796 : cp < 177 ? 798 : cp < 178 ? 800 : cp < 179 ? 801 : cp < 180 ? 803 : cp < 181 ? 805 : cp < 182 ? 806 : cp < 183 ? 808 : cp < 184 ? 810 : cp < 185 ? 811 : cp < 186 ? 813 : cp < 187 ? 815 : cp < 188 ? 816 : cp < 189 ? 818 : cp < 190 ? 820 : cp < 191 ? 821 : cp < 192 ? 823 : cp < 193 ? 824 : cp < 194 ? 826 : cp < 195 ? 828 : cp < 196 ? 829 : cp < 197 ? 831 : cp < 198 ? 833 : cp < 199 ? 834 : cp < 200 ? 836 : cp < 201 ? 837 : cp < 202 ? 839 : cp < 203 ? 841 : cp < 204 ? 842 : cp < 205 ? 844 : cp < 206 ? 845 : cp < 207 ? 847 : cp < 208 ? 848 : cp < 209 ? 850 : cp < 210 ? 851 : cp < 211 ? 853 : cp < 212 ? 855 : cp < 213 ? 856 : cp < 214 ? 858 : cp < 215 ? 859 : cp < 216 ? 860 : cp < 217 ? 862 : cp < 218 ? 863 : cp < 219 ? 865 : cp < 220 ? 866 : cp < 221 ? 868 : cp < 222 ? 869 : cp < 223 ? 870 : cp < 224 ? 872 : cp < 225 ? 873 : cp < 226 ? 874 : cp < 227 ? 876 : cp < 228 ? 877 : cp < 229 ? 878 : cp < 230 ? 880 : cp < 231 ? 881 : cp < 232 ? 882 : cp < 233 ? 883 : cp < 234 ? 885 : cp < 235 ? 886 : cp < 236 ? 887 : cp < 237 ? 888 : cp < 238 ? 889 : cp < 239 ? 890 : cp < 240 ? 892 : cp < 241 ? 893 : cp < 242 ? 894 : cp < 243 ? 895 : cp < 244 ? 896 : cp < 245 ? 897 : cp < 246 ? 898 : cp < 247 ? 899 : cp < 248 ? 900 : cp < 249 ? 901 : cp < 250 ? 902 : cp < 251 ? 903 : cp < 252 ? 904 : cp < 253 ? 905 : cp < 254 ? 906 : cp < 256 ? 907 : cp < 257 ? 908 : cp < 258 ? 909 : cp < 259 ? 910 : cp < 260 ? 911 : cp < 262 ? 912 : cp < 263 ? 913 : cp < 264 ? 914 : cp < 265 ? 915 : cp < 267 ? 916 : cp < 268 ? 917 : cp < 270 ? 918 : cp < 271 ? 919 : cp < 273 ? 920 : cp < 274 ? 921 : cp < 276 ? 922 : cp < 277 ? 923 : cp < 279 ? 924 : cp < 281 ? 925 : cp < 282 ? 926 : cp < 284 ? 927 : cp < 286 ? 928 : cp < 288 ? 929 : cp < 290 ? 930 : cp < 292 ? 931 : cp < 294 ? 932 : cp < 296 ? 933 : cp < 298 ? 934 : cp < 300 ? 935 : cp < 303 ? 936 : cp < 305 ? 937 : cp < 307 ? 938 : cp < 310 ? 939 : cp < 313 ? 940 : cp < 315 ? 941 : cp < 318 ? 942 : cp < 321 ? 943 : cp < 324 ? 944 : cp < 327 ? 945 : cp < 330 ? 946 : cp < 334 ? 947 : cp < 337 ? 948 : cp < 341 ? 949 : cp < 345 ? 950 : cp < 349 ? 951 : cp < 353 ? 952 : cp < 357 ? 953 : cp < 362 ? 954 : cp < 367 ? 955 : cp < 372 ? 956 : cp < 377 ? 957 : cp < 382 ? 958 : cp < 388 ? 959 : cp < 394 ? 960 : cp < 400 ? 961 : cp < 407 ? 962 : cp < 414 ? 963 : cp < 422 ? 964 : cp < 430 ? 965 : cp < 438 ? 966 : cp < 447 ? 967 : cp < 456 ? 968 : cp < 466 ? 969 : cp < 477 ? 970 : cp < 489 ? 971 : cp < 501 ? 972 : cp < 514 ? 973 : cp < 529 ? 974 : cp < 544 ? 975 : cp < 561 ? 976 : cp < 579 ? 977 : cp < 599 ? 978 : cp < 621 ? 979 : cp < 645 ? 980 : cp < 671 ? 981 : cp < 701 ? 982 : cp < 734 ? 983 : cp < 771 ? 984 : cp < 813 ? 985 : cp < 860 ? 986 : cp < 915 ? 987 : cp < 979 ? 988 : cp < 1054 ? 989 : cp < 1144 ? 990 : cp < 1253 ? 991 : cp < 1389 ? 992 : cp < 1562 ? 993 : cp < 1789 ? 994 : cp < 2101 ? 995 : cp < 2558 ? 996 : cp < 3290 ? 997 : cp < 4648 ? 998 : cp < 8045 ? 999 : 1000)

# python
win = .1 * (0 if cp < -8043 else 1 if cp < -4646 else 2 if cp < -3288 else 3 if cp < -2556 else 4 if cp < -2099 else 5 if cp < -1787 else 6 if cp < -1560 else 7 if cp < -1387 else 8 if cp < -1251 else 9 if cp < -1142 else 10 if cp < -1052 else 11 if cp < -977 else 12 if cp < -913 else 13 if cp < -858 else 14 if cp < -811 else 15 if cp < -769 else 16 if cp < -732 else 17 if cp < -699 else 18 if cp < -669 else 19 if cp < -643 else 20 if cp < -619 else 21 if cp < -597 else 22 if cp < -577 else 23 if cp < -559 else 24 if cp < -542 else 25 if cp < -527 else 26 if cp < -512 else 27 if cp < -499 else 28 if cp < -487 else 29 if cp < -475 else 30 if cp < -464 else 31 if cp < -454 else 32 if cp < -445 else 33 if cp < -436 else 34 if cp < -428 else 35 if cp < -420 else 36 if cp < -412 else 37 if cp < -405 else 38 if cp < -398 else 39 if cp < -392 else 40 if cp < -386 else 41 if cp < -380 else 42 if cp < -375 else 43 if cp < -370 else 44 if cp < -365 else 45 if cp < -360 else 46 if cp < -355 else 47 if cp < -351 else 48 if cp < -347 else 49 if cp < -343 else 50 if cp < -339 else 51 if cp < -335 else 52 if cp < -332 else 53 if cp < -328 else 54 if cp < -325 else 55 if cp < -322 else 56 if cp < -319 else 57 if cp < -316 else 58 if cp < -313 else 59 if cp < -311 else 60 if cp < -308 else 61 if cp < -305 else 62 if cp < -303 else 63 if cp < -301 else 64 if cp < -298 else 65 if cp < -296 else 66 if cp < -294 else 67 if cp < -292 else 68 if cp < -290 else 69 if cp < -288 else 70 if cp < -286 else 71 if cp < -284 else 72 if cp < -282 else 73 if cp < -280 else 74 if cp < -279 else 75 if cp < -277 else 76 if cp < -275 else 77 if cp < -274 else 78 if cp < -272 else 79 if cp < -271 else 80 if cp < -269 else 81 if cp < -268 else 82 if cp < -266 else 83 if cp < -265 else 84 if cp < -263 else 85 if cp < -262 else 86 if cp < -261 else 87 if cp < -260 else 88 if cp < -258 else 89 if cp < -257 else 90 if cp < -256 else 91 if cp < -255 else 92 if cp < -254 else 93 if cp < -252 else 94 if cp < -251 else 95 if cp < -250 else 96 if cp < -249 else 97 if cp < -248 else 98 if cp < -247 else 99 if cp < -246 else 100 if cp < -245 else 101 if cp < -244 else 102 if cp < -243 else 103 if cp < -242 else 104 if cp < -241 else 105 if cp < -240 else 106 if cp < -239 else 108 if cp < -238 else 109 if cp < -237 else 110 if cp < -236 else 111 if cp < -235 else 112 if cp < -234 else 113 if cp < -233 else 115 if cp < -232 else 116 if cp < -231 else 117 if cp < -230 else 118 if cp < -229 else 120 if cp < -228 else 121 if cp < -227 else 122 if cp < -226 else 124 if cp < -225 else 125 if cp < -224 else 126 if cp < -223 else 128 if cp < -222 else 129 if cp < -221 else 130 if cp < -220 else 132 if cp < -219 else 133 if cp < -218 else 135 if cp < -217 else 136 if cp < -216 else 138 if cp < -215 else 139 if cp < -214 else 140 if cp < -213 else 142 if cp < -212 else 143 if cp < -211 else 145 if cp < -210 else 147 if cp < -209 else 148 if cp < -208 else 150 if cp < -207 else 151 if cp < -206 else 153 if cp < -205 else 154 if cp < -204 else 156 if cp < -203 else 157 if cp < -202 else 159 if cp < -201 else 161 if cp < -200 else 162 if cp < -199 else 164 if cp < -198 else 165 if cp < -197 else 167 if cp < -196 else 169 if cp < -195 else 170 if cp < -194 else 172 if cp < -193 else 174 if cp < -192 else 175 if cp < -191 else 177 if cp < -190 else 178 if cp < -189 else 180 if cp < -188 else 182 if cp < -187 else 183 if cp < -186 else 185 if cp < -185 else 187 if cp < -184 else 188 if cp < -183 else 190 if cp < -182 else 192 if cp < -181 else 193 if cp < -180 else 195 if cp < -179 else 197 if cp < -178 else 198 if cp < -177 else 200 if cp < -176 else 202 if cp < -175 else 203 if cp < -174 else 205 if cp < -173 else 207 if cp < -172 else 208 if cp < -171 else 210 if cp < -170 else 212 if cp < -169 else 214 if cp < -168 else 215 if cp < -167 else 217 if cp < -166 else 219 if cp < -165 else 220 if cp < -164 else 222 if cp < -163 else 224 if cp < -162 else 225 if cp < -161 else 227 if cp < -160 else 229 if cp < -159 else 230 if cp < -158 else 232 if cp < -157 else 234 if cp < -156 else 235 if cp < -155 else 237 if cp < -154 else 239 if cp < -153 else 241 if cp < -152 else 242 if cp < -151 else 244 if cp < -150 else 246 if cp < -149 else 247 if cp < -148 else 249 if cp < -147 else 251 if cp < -146 else 252 if cp < -145 else 254 if cp < -144 else 256 if cp < -143 else 257 if cp < -142 else 259 if cp < -141 else 261 if cp < -140 else 263 if cp < -139 else 264 if cp < -138 else 266 if cp < -137 else 268 if cp < -136 else 269 if cp < -135 else 271 if cp < -134 else 273 if cp < -133 else 274 if cp < -132 else 276 if cp < -131 else 278 if cp < -130 else 280 if cp < -129 else 281 if cp < -128 else 283 if cp < -127 else 285 if cp < -126 else 286 if cp < -125 else 288 if cp < -124 else 290 if cp < -123 else 291 if cp < -122 else 293 if cp < -121 else 295 if cp < -120 else 296 if cp < -119 else 298 if cp < -118 else 300 if cp < -117 else 302 if cp < -116 else 303 if cp < -115 else 305 if cp < -114 else 307 if cp < -113 else 308 if cp < -112 else 310 if cp < -111 else 312 if cp < -110 else 313 if cp < -109 else 315 if cp < -108 else 317 if cp < -107 else 318 if cp < -106 else 320 if cp < -105 else 322 if cp < -104 else 324 if cp < -103 else 325 if cp < -102 else 327 if cp < -101 else 329 if cp < -100 else 330 if cp < -99 else 332 if cp < -98 else 334 if cp < -97 else 335 if cp < -96 else 337 if cp < -95 else 339 if cp < -94 else 341 if cp < -93 else 342 if cp < -92 else 344 if cp < -91 else 346 if cp < -90 else 347 if cp < -89 else 349 if cp < -88 else 351 if cp < -87 else 352 if cp < -86 else 354 if cp < -85 else 356 if cp < -84 else 357 if cp < -83 else 359 if cp < -82 else 361 if cp < -81 else 363 if cp < -80 else 364 if cp < -79 else 366 if cp < -78 else 368 if cp < -77 else 369 if cp < -76 else 371 if cp < -75 else 373 if cp < -74 else 374 if cp < -73 else 376 if cp < -72 else 378 if cp < -71 else 380 if cp < -70 else 381 if cp < -69 else 383 if cp < -68 else 385 if cp < -67 else 386 if cp < -66 else 388 if cp < -65 else 390 if cp < -64 else 391 if cp < -63 else 393 if cp < -62 else 395 if cp < -61 else 396 if cp < -60 else 398 if cp < -59 else 400 if cp < -58 else 402 if cp < -57 else 403 if cp < -56 else 405 if cp < -55 else 407 if cp < -54 else 408 if cp < -53 else 410 if cp < -52 else 412 if cp < -51 else 413 if cp < -50 else 415 if cp < -49 else 417 if cp < -48 else 418 if cp < -47 else 420 if cp < -46 else 422 if cp < -45 else 424 if cp < -44 else 425 if cp < -43 else 427 if cp < -42 else 429 if cp < -41 else 430 if cp < -40 else 432 if cp < -39 else 434 if cp < -38 else 435 if cp < -37 else 437 if cp < -36 else 439 if cp < -35 else 441 if cp < -34 else 442 if cp < -33 else 444 if cp < -32 else 446 if cp < -31 else 447 if cp < -30 else 449 if cp < -29 else 451 if cp < -28 else 452 if cp < -27 else 454 if cp < -26 else 456 if cp < -25 else 457 if cp < -24 else 459 if cp < -23 else 461 if cp < -22 else 463 if cp < -21 else 464 if cp < -20 else 466 if cp < -19 else 468 if cp < -18 else 469 if cp < -17 else 471 if cp < -16 else 473 if cp < -15 else 474 if cp < -14 else 476 if cp < -13 else 478 if cp < -12 else 480 if cp < -11 else 481 if cp < -10 else 483 if cp < -9 else 485 if cp < -8 else 486 if cp < -7 else 488 if cp < -6 else 490 if cp < -5 else 491 if cp < -4 else 493 if cp < -3 else 495 if cp < -2 else 496 if cp < -1 else 498 if cp < 0 else 500 if cp < 1 else 502 if cp < 2 else 503 if cp < 3 else 505 if cp < 4 else 507 if cp < 5 else 508 if cp < 6 else 510 if cp < 7 else 512 if cp < 8 else 513 if cp < 9 else 515 if cp < 10 else 517 if cp < 11 else 518 if cp < 12 else 520 if cp < 13 else 522 if cp < 14 else 524 if cp < 15 else 525 if cp < 16 else 527 if cp < 17 else 529 if cp < 18 else 530 if cp < 19 else 532 if cp < 20 else 534 if cp < 21 else 535 if cp < 22 else 537 if cp < 23 else 539 if cp < 24 else 541 if cp < 25 else 542 if cp < 26 else 544 if cp < 27 else 546 if cp < 28 else 547 if cp < 29 else 549 if cp < 30 else 551 if cp < 31 else 552 if cp < 32 else 554 if cp < 33 else 556 if cp < 34 else 557 if cp < 35 else 559 if cp < 36 else 561 if cp < 37 else 563 if cp < 38 else 564 if cp < 39 else 566 if cp < 40 else 568 if cp < 41 else 569 if cp < 42 else 571 if cp < 43 else 573 if cp < 44 else 574 if cp < 45 else 576 if cp < 46 else 578 if cp < 47 else 580 if cp < 48 else 581 if cp < 49 else 583 if cp < 50 else 585 if cp < 51 else 586 if cp < 52 else 588 if cp < 53 else 590 if cp < 54 else 591 if cp < 55 else 593 if cp < 56 else 595 if cp < 57 else 596 if cp < 58 else 598 if cp < 59 else 600 if cp < 60 else 602 if cp < 61 else 603 if cp < 62 else 605 if cp < 63 else 607 if cp < 64 else 608 if cp < 65 else 610 if cp < 66 else 612 if cp < 67 else 613 if cp < 68 else 615 if cp < 69 else 617 if cp < 70 else 618 if cp < 71 else 620 if cp < 72 else 622 if cp < 73 else 624 if cp < 74 else 625 if cp < 75 else 627 if cp < 76 else 629 if cp < 77 else 630 if cp < 78 else 632 if cp < 79 else 634 if cp < 80 else 635 if cp < 81 else 637 if cp < 82 else 639 if cp < 83 else 641 if cp < 84 else 642 if cp < 85 else 644 if cp < 86 else 646 if cp < 87 else 647 if cp < 88 else 649 if cp < 89 else 651 if cp < 90 else 652 if cp < 91 else 654 if cp < 92 else 656 if cp < 93 else 657 if cp < 94 else 659 if cp < 95 else 661 if cp < 96 else 663 if cp < 97 else 664 if cp < 98 else 666 if cp < 99 else 668 if cp < 100 else 669 if cp < 101 else 671 if cp < 102 else 673 if cp < 103 else 674 if cp < 104 else 676 if cp < 105 else 678 if cp < 106 else 680 if cp < 107 else 681 if cp < 108 else 683 if cp < 109 else 685 if cp < 110 else 686 if cp < 111 else 688 if cp < 112 else 690 if cp < 113 else 691 if cp < 114 else 693 if cp < 115 else 695 if cp < 116 else 696 if cp < 117 else 698 if cp < 118 else 700 if cp < 119 else 702 if cp < 120 else 703 if cp < 121 else 705 if cp < 122 else 707 if cp < 123 else 708 if cp < 124 else 710 if cp < 125 else 712 if cp < 126 else 713 if cp < 127 else 715 if cp < 128 else 717 if cp < 129 else 718 if cp < 130 else 720 if cp < 131 else 722 if cp < 132 else 724 if cp < 133 else 725 if cp < 134 else 727 if cp < 135 else 729 if cp < 136 else 730 if cp < 137 else 732 if cp < 138 else 734 if cp < 139 else 735 if cp < 140 else 737 if cp < 141 else 739 if cp < 142 else 741 if cp < 143 else 742 if cp < 144 else 744 if cp < 145 else 746 if cp < 146 else 747 if cp < 147 else 749 if cp < 148 else 751 if cp < 149 else 752 if cp < 150 else 754 if cp < 151 else 756 if cp < 152 else 757 if cp < 153 else 759 if cp < 154 else 761 if cp < 155 else 763 if cp < 156 else 764 if cp < 157 else 766 if cp < 158 else 768 if cp < 159 else 769 if cp < 160 else 771 if cp < 161 else 773 if cp < 162 else 774 if cp < 163 else 776 if cp < 164 else 778 if cp < 165 else 779 if cp < 166 else 781 if cp < 167 else 783 if cp < 168 else 784 if cp < 169 else 786 if cp < 170 else 788 if cp < 171 else 790 if cp < 172 else 791 if cp < 173 else 793 if cp < 174 else 795 if cp < 175 else 796 if cp < 176 else 798 if cp < 177 else 800 if cp < 178 else 801 if cp < 179 else 803 if cp < 180 else 805 if cp < 181 else 806 if cp < 182 else 808 if cp < 183 else 810 if cp < 184 else 811 if cp < 185 else 813 if cp < 186 else 815 if cp < 187 else 816 if cp < 188 else 818 if cp < 189 else 820 if cp < 190 else 821 if cp < 191 else 823 if cp < 192 else 824 if cp < 193 else 826 if cp < 194 else 828 if cp < 195 else 829 if cp < 196 else 831 if cp < 197 else 833 if cp < 198 else 834 if cp < 199 else 836 if cp < 200 else 837 if cp < 201 else 839 if cp < 202 else 841 if cp < 203 else 842 if cp < 204 else 844 if cp < 205 else 845 if cp < 206 else 847 if cp < 207 else 848 if cp < 208 else 850 if cp < 209 else 851 if cp < 210 else 853 if cp < 211 else 855 if cp < 212 else 856 if cp < 213 else 858 if cp < 214 else 859 if cp < 215 else 860 if cp < 216 else 862 if cp < 217 else 863 if cp < 218 else 865 if cp < 219 else 866 if cp < 220 else 868 if cp < 221 else 869 if cp < 222 else 870 if cp < 223 else 872 if cp < 224 else 873 if cp < 225 else 874 if cp < 226 else 876 if cp < 227 else 877 if cp < 228 else 878 if cp < 229 else 880 if cp < 230 else 881 if cp < 231 else 882 if cp < 232 else 883 if cp < 233 else 885 if cp < 234 else 886 if cp < 235 else 887 if cp < 236 else 888 if cp < 237 else 889 if cp < 238 else 890 if cp < 239 else 892 if cp < 240 else 893 if cp < 241 else 894 if cp < 242 else 895 if cp < 243 else 896 if cp < 244 else 897 if cp < 245 else 898 if cp < 246 else 899 if cp < 247 else 900 if cp < 248 else 901 if cp < 249 else 902 if cp < 250 else 903 if cp < 251 else 904 if cp < 252 else 905 if cp < 253 else 906 if cp < 254 else 907 if cp < 256 else 908 if cp < 257 else 909 if cp < 258 else 910 if cp < 259 else 911 if cp < 260 else 912 if cp < 262 else 913 if cp < 263 else 914 if cp < 264 else 915 if cp < 265 else 916 if cp < 267 else 917 if cp < 268 else 918 if cp < 270 else 919 if cp < 271 else 920 if cp < 273 else 921 if cp < 274 else 922 if cp < 276 else 923 if cp < 277 else 924 if cp < 279 else 925 if cp < 281 else 926 if cp < 282 else 927 if cp < 284 else 928 if cp < 286 else 929 if cp < 288 else 930 if cp < 290 else 931 if cp < 292 else 932 if cp < 294 else 933 if cp < 296 else 934 if cp < 298 else 935 if cp < 300 else 936 if cp < 303 else 937 if cp < 305 else 938 if cp < 307 else 939 if cp < 310 else 940 if cp < 313 else 941 if cp < 315 else 942 if cp < 318 else 943 if cp < 321 else 944 if cp < 324 else 945 if cp < 327 else 946 if cp < 330 else 947 if cp < 334 else 948 if cp < 337 else 949 if cp < 341 else 950 if cp < 345 else 951 if cp < 349 else 952 if cp < 353 else 953 if cp < 357 else 954 if cp < 362 else 955 if cp < 367 else 956 if cp < 372 else 957 if cp < 377 else 958 if cp < 382 else 959 if cp < 388 else 960 if cp < 394 else 961 if cp < 400 else 962 if cp < 407 else 963 if cp < 414 else 964 if cp < 422 else 965 if cp < 430 else 966 if cp < 438 else 967 if cp < 447 else 968 if cp < 456 else 969 if cp < 466 else 970 if cp < 477 else 971 if cp < 489 else 972 if cp < 501 else 973 if cp < 514 else 974 if cp < 529 else 975 if cp < 544 else 976 if cp < 561 else 977 if cp < 579 else 978 if cp < 599 else 979 if cp < 621 else 980 if cp < 645 else 981 if cp < 671 else 982 if cp < 701 else 983 if cp < 734 else 984 if cp < 771 else 985 if cp < 813 else 986 if cp < 860 else 987 if cp < 915 else 988 if cp < 979 else 989 if cp < 1054 else 990 if cp < 1144 else 991 if cp < 1253 else 992 if cp < 1389 else 993 if cp < 1562 else 994 if cp < 1789 else 995 if cp < 2101 else 996 if cp < 2558 else 997 if cp < 3290 else 998 if cp < 4648 else 999 if cp < 8045 else 1000)

Optimizing the ternary chain to do a binary search, e.g.,

win = 0.1 * (cp < 1
  ? cp < -172
    ? cp < -261
      ? cp < -370
        ? cp < -597
          ? cp < -1052
            ? cp < -1787
              ? cp < -3288
                ? cp < -4646
                  ? cp < -8043 ? 0 : 1
                  : 2
                : cp < -2099
                  ? cp < -2556 ? 3 : 4
                  : 5
              : 

… is left as an exercise for the reader. 😉

Generating the scripts at the beginning

const CPs = new Map();
for (let i = 0; i < 1000; i++) {
  const Q = -1 + .002 * (i + .5);
  const cp = Math.round(295 * Q / (1 - 0.976953125 * Math.pow(Q, 14)));
  CPs.set(cp, i);
}

`
# javascript
win = .1 * (${[...CPs].map(([cp, win]) => `cp < ${cp + 1} ? ${win} : `).join("")}1000)

# python
win = .1 * (${[...CPs].map(([cp, win]) => `${win} if cp < ${cp + 1} else `).join("")}1000)
`

@Mardak
Copy link
Contributor

Mardak commented Jun 9, 2019

I just couldn't help myself 😛

win = 0.1 * (cp < 1
  ? cp < -172
    ? cp < -261
      ? cp < -370
        ? cp < -597
          ? cp < -1052
            ? cp < -1787
              ? cp < -3288
                ? cp < -4646
                  ? cp < -8043 ? 0 : 1
                  : 2
                : cp < -2099
                  ? cp < -2556 ? 3 : 4
                  : 5
              : cp < -1251
                ? cp < -1387
                  ? cp < -1560 ? 6 : 7
                  : 8
                : cp < -1142 ? 9 : 10
            : cp < -732
              ? cp < -858
                ? cp < -913
                  ? cp < -977 ? 11 : 12
                  : 13
                : cp < -769
                  ? cp < -811 ? 14 : 15
                  : 16
              : cp < -643
                ? cp < -669
                  ? cp < -699 ? 17 : 18
                  : 19
                : cp < -619 ? 20 : 21
          : cp < -445
            ? cp < -499
              ? cp < -542
                ? cp < -559
                  ? cp < -577 ? 22 : 23
                  : 24
                : cp < -512
                  ? cp < -527 ? 25 : 26
                  : 27
              : cp < -464
                ? cp < -475
                  ? cp < -487 ? 28 : 29
                  : 30
                : cp < -454 ? 31 : 32
            : cp < -398
              ? cp < -420
                ? cp < -428
                  ? cp < -436 ? 33 : 34
                  : 35
                : cp < -405
                  ? cp < -412 ? 36 : 37
                  : 38
              : cp < -380
                ? cp < -386
                  ? cp < -392 ? 39 : 40
                  : 41
                : cp < -375 ? 42 : 43
        : cp < -296
          ? cp < -325
            ? cp < -343
              ? cp < -355
                ? cp < -360
                  ? cp < -365 ? 44 : 45
                  : 46
                : cp < -347
                  ? cp < -351 ? 47 : 48
                  : 49
              : cp < -332
                ? cp < -335
                  ? cp < -339 ? 50 : 51
                  : 52
                : cp < -328 ? 53 : 54
            : cp < -308
              ? cp < -316
                ? cp < -319
                  ? cp < -322 ? 55 : 56
                  : 57
                : cp < -311
                  ? cp < -313 ? 58 : 59
                  : 60
              : cp < -301
                ? cp < -303
                  ? cp < -305 ? 61 : 62
                  : 63
                : cp < -298 ? 64 : 65
          : cp < -275
            ? cp < -284
              ? cp < -290
                ? cp < -292
                  ? cp < -294 ? 66 : 67
                  : 68
                : cp < -286
                  ? cp < -288 ? 69 : 70
                  : 71
              : cp < -279
                ? cp < -280
                  ? cp < -282 ? 72 : 73
                  : 74
                : cp < -277 ? 75 : 76
            : cp < -268
              ? cp < -271
                ? cp < -272
                  ? cp < -274 ? 77 : 78
                  : 79
                : cp < -269 ? 80 : 81
              : cp < -263
                ? cp < -265
                  ? cp < -266 ? 82 : 83
                  : 84
                : cp < -262 ? 85 : 86
      : cp < -215
        ? cp < -237
          ? cp < -248
            ? cp < -254
              ? cp < -257
                ? cp < -258
                  ? cp < -260 ? 87 : 88
                  : 89
                : cp < -255
                  ? cp < -256 ? 90 : 91
                  : 92
              : cp < -250
                ? cp < -251
                  ? cp < -252 ? 93 : 94
                  : 95
                : cp < -249 ? 96 : 97
            : cp < -242
              ? cp < -245
                ? cp < -246
                  ? cp < -247 ? 98 : 99
                  : 100
                : cp < -243
                  ? cp < -244 ? 101 : 102
                  : 103
              : cp < -239
                ? cp < -240
                  ? cp < -241 ? 104 : 105
                  : 106
                : cp < -238 ? 108 : 109
          : cp < -226
            ? cp < -231
              ? cp < -234
                ? cp < -235
                  ? cp < -236 ? 110 : 111
                  : 112
                : cp < -232
                  ? cp < -233 ? 113 : 115
                  : 116
              : cp < -228
                ? cp < -229
                  ? cp < -230 ? 117 : 118
                  : 120
                : cp < -227 ? 121 : 122
            : cp < -220
              ? cp < -223
                ? cp < -224
                  ? cp < -225 ? 124 : 125
                  : 126
                : cp < -221
                  ? cp < -222 ? 128 : 129
                  : 130
              : cp < -217
                ? cp < -218
                  ? cp < -219 ? 132 : 133
                  : 135
                : cp < -216 ? 136 : 138
        : cp < -193
          ? cp < -204
            ? cp < -209
              ? cp < -212
                ? cp < -213
                  ? cp < -214 ? 139 : 140
                  : 142
                : cp < -210
                  ? cp < -211 ? 143 : 145
                  : 147
              : cp < -206
                ? cp < -207
                  ? cp < -208 ? 148 : 150
                  : 151
                : cp < -205 ? 153 : 154
            : cp < -198
              ? cp < -201
                ? cp < -202
                  ? cp < -203 ? 156 : 157
                  : 159
                : cp < -199
                  ? cp < -200 ? 161 : 162
                  : 164
              : cp < -195
                ? cp < -196
                  ? cp < -197 ? 165 : 167
                  : 169
                : cp < -194 ? 170 : 172
          : cp < -182
            ? cp < -187
              ? cp < -190
                ? cp < -191
                  ? cp < -192 ? 174 : 175
                  : 177
                : cp < -188
                  ? cp < -189 ? 178 : 180
                  : 182
              : cp < -184
                ? cp < -185
                  ? cp < -186 ? 183 : 185
                  : 187
                : cp < -183 ? 188 : 190
            : cp < -177
              ? cp < -179
                ? cp < -180
                  ? cp < -181 ? 192 : 193
                  : 195
                : cp < -178 ? 197 : 198
              : cp < -174
                ? cp < -175
                  ? cp < -176 ? 200 : 202
                  : 203
                : cp < -173 ? 205 : 207
    : cp < -85
      ? cp < -128
        ? cp < -150
          ? cp < -161
            ? cp < -166
              ? cp < -169
                ? cp < -170
                  ? cp < -171 ? 208 : 210
                  : 212
                : cp < -167
                  ? cp < -168 ? 214 : 215
                  : 217
              : cp < -163
                ? cp < -164
                  ? cp < -165 ? 219 : 220
                  : 222
                : cp < -162 ? 224 : 225
            : cp < -155
              ? cp < -158
                ? cp < -159
                  ? cp < -160 ? 227 : 229
                  : 230
                : cp < -156
                  ? cp < -157 ? 232 : 234
                  : 235
              : cp < -152
                ? cp < -153
                  ? cp < -154 ? 237 : 239
                  : 241
                : cp < -151 ? 242 : 244
          : cp < -139
            ? cp < -144
              ? cp < -147
                ? cp < -148
                  ? cp < -149 ? 246 : 247
                  : 249
                : cp < -145
                  ? cp < -146 ? 251 : 252
                  : 254
              : cp < -141
                ? cp < -142
                  ? cp < -143 ? 256 : 257
                  : 259
                : cp < -140 ? 261 : 263
            : cp < -133
              ? cp < -136
                ? cp < -137
                  ? cp < -138 ? 264 : 266
                  : 268
                : cp < -134
                  ? cp < -135 ? 269 : 271
                  : 273
              : cp < -130
                ? cp < -131
                  ? cp < -132 ? 274 : 276
                  : 278
                : cp < -129 ? 280 : 281
        : cp < -106
          ? cp < -117
            ? cp < -122
              ? cp < -125
                ? cp < -126
                  ? cp < -127 ? 283 : 285
                  : 286
                : cp < -123
                  ? cp < -124 ? 288 : 290
                  : 291
              : cp < -119
                ? cp < -120
                  ? cp < -121 ? 293 : 295
                  : 296
                : cp < -118 ? 298 : 300
            : cp < -111
              ? cp < -114
                ? cp < -115
                  ? cp < -116 ? 302 : 303
                  : 305
                : cp < -112
                  ? cp < -113 ? 307 : 308
                  : 310
              : cp < -108
                ? cp < -109
                  ? cp < -110 ? 312 : 313
                  : 315
                : cp < -107 ? 317 : 318
          : cp < -95
            ? cp < -100
              ? cp < -103
                ? cp < -104
                  ? cp < -105 ? 320 : 322
                  : 324
                : cp < -101
                  ? cp < -102 ? 325 : 327
                  : 329
              : cp < -97
                ? cp < -98
                  ? cp < -99 ? 330 : 332
                  : 334
                : cp < -96 ? 335 : 337
            : cp < -90
              ? cp < -92
                ? cp < -93
                  ? cp < -94 ? 339 : 341
                  : 342
                : cp < -91 ? 344 : 346
              : cp < -87
                ? cp < -88
                  ? cp < -89 ? 347 : 349
                  : 351
                : cp < -86 ? 352 : 354
      : cp < -42
        ? cp < -63
          ? cp < -74
            ? cp < -79
              ? cp < -82
                ? cp < -83
                  ? cp < -84 ? 356 : 357
                  : 359
                : cp < -80
                  ? cp < -81 ? 361 : 363
                  : 364
              : cp < -76
                ? cp < -77
                  ? cp < -78 ? 366 : 368
                  : 369
                : cp < -75 ? 371 : 373
            : cp < -68
              ? cp < -71
                ? cp < -72
                  ? cp < -73 ? 374 : 376
                  : 378
                : cp < -69
                  ? cp < -70 ? 380 : 381
                  : 383
              : cp < -65
                ? cp < -66
                  ? cp < -67 ? 385 : 386
                  : 388
                : cp < -64 ? 390 : 391
          : cp < -52
            ? cp < -57
              ? cp < -60
                ? cp < -61
                  ? cp < -62 ? 393 : 395
                  : 396
                : cp < -58
                  ? cp < -59 ? 398 : 400
                  : 402
              : cp < -54
                ? cp < -55
                  ? cp < -56 ? 403 : 405
                  : 407
                : cp < -53 ? 408 : 410
            : cp < -47
              ? cp < -49
                ? cp < -50
                  ? cp < -51 ? 412 : 413
                  : 415
                : cp < -48 ? 417 : 418
              : cp < -44
                ? cp < -45
                  ? cp < -46 ? 420 : 422
                  : 424
                : cp < -43 ? 425 : 427
        : cp < -20
          ? cp < -31
            ? cp < -36
              ? cp < -39
                ? cp < -40
                  ? cp < -41 ? 429 : 430
                  : 432
                : cp < -37
                  ? cp < -38 ? 434 : 435
                  : 437
              : cp < -33
                ? cp < -34
                  ? cp < -35 ? 439 : 441
                  : 442
                : cp < -32 ? 444 : 446
            : cp < -25
              ? cp < -28
                ? cp < -29
                  ? cp < -30 ? 447 : 449
                  : 451
                : cp < -26
                  ? cp < -27 ? 452 : 454
                  : 456
              : cp < -22
                ? cp < -23
                  ? cp < -24 ? 457 : 459
                  : 461
                : cp < -21 ? 463 : 464
          : cp < -9
            ? cp < -14
              ? cp < -17
                ? cp < -18
                  ? cp < -19 ? 466 : 468
                  : 469
                : cp < -15
                  ? cp < -16 ? 471 : 473
                  : 474
              : cp < -11
                ? cp < -12
                  ? cp < -13 ? 476 : 478
                  : 480
                : cp < -10 ? 481 : 483
            : cp < -4
              ? cp < -6
                ? cp < -7
                  ? cp < -8 ? 485 : 486
                  : 488
                : cp < -5 ? 490 : 491
              : cp < -1
                ? cp < -2
                  ? cp < -3 ? 493 : 495
                  : 496
                : cp < 0 ? 498 : 500
  : cp < 175
    ? cp < 88
      ? cp < 45
        ? cp < 23
          ? cp < 12
            ? cp < 7
              ? cp < 4
                ? cp < 3
                  ? cp < 2 ? 502 : 503
                  : 505
                : cp < 6
                  ? cp < 5 ? 507 : 508
                  : 510
              : cp < 10
                ? cp < 9
                  ? cp < 8 ? 512 : 513
                  : 515
                : cp < 11 ? 517 : 518
            : cp < 18
              ? cp < 15
                ? cp < 14
                  ? cp < 13 ? 520 : 522
                  : 524
                : cp < 17
                  ? cp < 16 ? 525 : 527
                  : 529
              : cp < 21
                ? cp < 20
                  ? cp < 19 ? 530 : 532
                  : 534
                : cp < 22 ? 535 : 537
          : cp < 34
            ? cp < 29
              ? cp < 26
                ? cp < 25
                  ? cp < 24 ? 539 : 541
                  : 542
                : cp < 28
                  ? cp < 27 ? 544 : 546
                  : 547
              : cp < 32
                ? cp < 31
                  ? cp < 30 ? 549 : 551
                  : 552
                : cp < 33 ? 554 : 556
            : cp < 40
              ? cp < 37
                ? cp < 36
                  ? cp < 35 ? 557 : 559
                  : 561
                : cp < 39
                  ? cp < 38 ? 563 : 564
                  : 566
              : cp < 43
                ? cp < 42
                  ? cp < 41 ? 568 : 569
                  : 571
                : cp < 44 ? 573 : 574
        : cp < 67
          ? cp < 56
            ? cp < 51
              ? cp < 48
                ? cp < 47
                  ? cp < 46 ? 576 : 578
                  : 580
                : cp < 50
                  ? cp < 49 ? 581 : 583
                  : 585
              : cp < 54
                ? cp < 53
                  ? cp < 52 ? 586 : 588
                  : 590
                : cp < 55 ? 591 : 593
            : cp < 62
              ? cp < 59
                ? cp < 58
                  ? cp < 57 ? 595 : 596
                  : 598
                : cp < 61
                  ? cp < 60 ? 600 : 602
                  : 603
              : cp < 65
                ? cp < 64
                  ? cp < 63 ? 605 : 607
                  : 608
                : cp < 66 ? 610 : 612
          : cp < 78
            ? cp < 73
              ? cp < 70
                ? cp < 69
                  ? cp < 68 ? 613 : 615
                  : 617
                : cp < 72
                  ? cp < 71 ? 618 : 620
                  : 622
              : cp < 76
                ? cp < 75
                  ? cp < 74 ? 624 : 625
                  : 627
                : cp < 77 ? 629 : 630
            : cp < 83
              ? cp < 81
                ? cp < 80
                  ? cp < 79 ? 632 : 634
                  : 635
                : cp < 82 ? 637 : 639
              : cp < 86
                ? cp < 85
                  ? cp < 84 ? 641 : 642
                  : 644
                : cp < 87 ? 646 : 647
      : cp < 132
        ? cp < 110
          ? cp < 99
            ? cp < 94
              ? cp < 91
                ? cp < 90
                  ? cp < 89 ? 649 : 651
                  : 652
                : cp < 93
                  ? cp < 92 ? 654 : 656
                  : 657
              : cp < 97
                ? cp < 96
                  ? cp < 95 ? 659 : 661
                  : 663
                : cp < 98 ? 664 : 666
            : cp < 105
              ? cp < 102
                ? cp < 101
                  ? cp < 100 ? 668 : 669
                  : 671
                : cp < 104
                  ? cp < 103 ? 673 : 674
                  : 676
              : cp < 108
                ? cp < 107
                  ? cp < 106 ? 678 : 680
                  : 681
                : cp < 109 ? 683 : 685
          : cp < 121
            ? cp < 116
              ? cp < 113
                ? cp < 112
                  ? cp < 111 ? 686 : 688
                  : 690
                : cp < 115
                  ? cp < 114 ? 691 : 693
                  : 695
              : cp < 119
                ? cp < 118
                  ? cp < 117 ? 696 : 698
                  : 700
                : cp < 120 ? 702 : 703
            : cp < 127
              ? cp < 124
                ? cp < 123
                  ? cp < 122 ? 705 : 707
                  : 708
                : cp < 126
                  ? cp < 125 ? 710 : 712
                  : 713
              : cp < 130
                ? cp < 129
                  ? cp < 128 ? 715 : 717
                  : 718
                : cp < 131 ? 720 : 722
        : cp < 154
          ? cp < 143
            ? cp < 138
              ? cp < 135
                ? cp < 134
                  ? cp < 133 ? 724 : 725
                  : 727
                : cp < 137
                  ? cp < 136 ? 729 : 730
                  : 732
              : cp < 141
                ? cp < 140
                  ? cp < 139 ? 734 : 735
                  : 737
                : cp < 142 ? 739 : 741
            : cp < 149
              ? cp < 146
                ? cp < 145
                  ? cp < 144 ? 742 : 744
                  : 746
                : cp < 148
                  ? cp < 147 ? 747 : 749
                  : 751
              : cp < 152
                ? cp < 151
                  ? cp < 150 ? 752 : 754
                  : 756
                : cp < 153 ? 757 : 759
          : cp < 165
            ? cp < 160
              ? cp < 157
                ? cp < 156
                  ? cp < 155 ? 761 : 763
                  : 764
                : cp < 159
                  ? cp < 158 ? 766 : 768
                  : 769
              : cp < 163
                ? cp < 162
                  ? cp < 161 ? 771 : 773
                  : 774
                : cp < 164 ? 776 : 778
            : cp < 170
              ? cp < 168
                ? cp < 167
                  ? cp < 166 ? 779 : 781
                  : 783
                : cp < 169 ? 784 : 786
              : cp < 173
                ? cp < 172
                  ? cp < 171 ? 788 : 790
                  : 791
                : cp < 174 ? 793 : 795
    : cp < 264
      ? cp < 219
        ? cp < 197
          ? cp < 186
            ? cp < 181
              ? cp < 178
                ? cp < 177
                  ? cp < 176 ? 796 : 798
                  : 800
                : cp < 180
                  ? cp < 179 ? 801 : 803
                  : 805
              : cp < 184
                ? cp < 183
                  ? cp < 182 ? 806 : 808
                  : 810
                : cp < 185 ? 811 : 813
            : cp < 192
              ? cp < 189
                ? cp < 188
                  ? cp < 187 ? 815 : 816
                  : 818
                : cp < 191
                  ? cp < 190 ? 820 : 821
                  : 823
              : cp < 195
                ? cp < 194
                  ? cp < 193 ? 824 : 826
                  : 828
                : cp < 196 ? 829 : 831
          : cp < 208
            ? cp < 203
              ? cp < 200
                ? cp < 199
                  ? cp < 198 ? 833 : 834
                  : 836
                : cp < 202
                  ? cp < 201 ? 837 : 839
                  : 841
              : cp < 206
                ? cp < 205
                  ? cp < 204 ? 842 : 844
                  : 845
                : cp < 207 ? 847 : 848
            : cp < 214
              ? cp < 211
                ? cp < 210
                  ? cp < 209 ? 850 : 851
                  : 853
                : cp < 213
                  ? cp < 212 ? 855 : 856
                  : 858
              : cp < 217
                ? cp < 216
                  ? cp < 215 ? 859 : 860
                  : 862
                : cp < 218 ? 863 : 865
        : cp < 241
          ? cp < 230
            ? cp < 225
              ? cp < 222
                ? cp < 221
                  ? cp < 220 ? 866 : 868
                  : 869
                : cp < 224
                  ? cp < 223 ? 870 : 872
                  : 873
              : cp < 228
                ? cp < 227
                  ? cp < 226 ? 874 : 876
                  : 877
                : cp < 229 ? 878 : 880
            : cp < 236
              ? cp < 233
                ? cp < 232
                  ? cp < 231 ? 881 : 882
                  : 883
                : cp < 235
                  ? cp < 234 ? 885 : 886
                  : 887
              : cp < 239
                ? cp < 238
                  ? cp < 237 ? 888 : 889
                  : 890
                : cp < 240 ? 892 : 893
          : cp < 252
            ? cp < 247
              ? cp < 244
                ? cp < 243
                  ? cp < 242 ? 894 : 895
                  : 896
                : cp < 246
                  ? cp < 245 ? 897 : 898
                  : 899
              : cp < 250
                ? cp < 249
                  ? cp < 248 ? 900 : 901
                  : 902
                : cp < 251 ? 903 : 904
            : cp < 258
              ? cp < 256
                ? cp < 254
                  ? cp < 253 ? 905 : 906
                  : 907
                : cp < 257 ? 908 : 909
              : cp < 262
                ? cp < 260
                  ? cp < 259 ? 910 : 911
                  : 912
                : cp < 263 ? 913 : 914
      : cp < 377
        ? cp < 303
          ? cp < 281
            ? cp < 273
              ? cp < 268
                ? cp < 267
                  ? cp < 265 ? 915 : 916
                  : 917
                : cp < 271
                  ? cp < 270 ? 918 : 919
                  : 920
              : cp < 277
                ? cp < 276
                  ? cp < 274 ? 921 : 922
                  : 923
                : cp < 279 ? 924 : 925
            : cp < 292
              ? cp < 286
                ? cp < 284
                  ? cp < 282 ? 926 : 927
                  : 928
                : cp < 290
                  ? cp < 288 ? 929 : 930
                  : 931
              : cp < 298
                ? cp < 296
                  ? cp < 294 ? 932 : 933
                  : 934
                : cp < 300 ? 935 : 936
          : cp < 334
            ? cp < 318
              ? cp < 310
                ? cp < 307
                  ? cp < 305 ? 937 : 938
                  : 939
                : cp < 315
                  ? cp < 313 ? 940 : 941
                  : 942
              : cp < 327
                ? cp < 324
                  ? cp < 321 ? 943 : 944
                  : 945
                : cp < 330 ? 946 : 947
            : cp < 353
              ? cp < 345
                ? cp < 341
                  ? cp < 337 ? 948 : 949
                  : 950
                : cp < 349 ? 951 : 952
              : cp < 367
                ? cp < 362
                  ? cp < 357 ? 953 : 954
                  : 955
                : cp < 372 ? 956 : 957
        : cp < 621
          ? cp < 456
            ? cp < 414
              ? cp < 394
                ? cp < 388
                  ? cp < 382 ? 958 : 959
                  : 960
                : cp < 407
                  ? cp < 400 ? 961 : 962
                  : 963
              : cp < 438
                ? cp < 430
                  ? cp < 422 ? 964 : 965
                  : 966
                : cp < 447 ? 967 : 968
            : cp < 529
              ? cp < 489
                ? cp < 477
                  ? cp < 466 ? 969 : 970
                  : 971
                : cp < 514
                  ? cp < 501 ? 972 : 973
                  : 974
              : cp < 579
                ? cp < 561
                  ? cp < 544 ? 975 : 976
                  : 977
                : cp < 599 ? 978 : 979
          : cp < 1144
            ? cp < 813
              ? cp < 701
                ? cp < 671
                  ? cp < 645 ? 980 : 981
                  : 982
                : cp < 771
                  ? cp < 734 ? 983 : 984
                  : 985
              : cp < 979
                ? cp < 915
                  ? cp < 860 ? 986 : 987
                  : 988
                : cp < 1054 ? 989 : 990
            : cp < 2101
              ? cp < 1562
                ? cp < 1389
                  ? cp < 1253 ? 991 : 992
                  : 993
                : cp < 1789 ? 994 : 995
              : cp < 4648
                ? cp < 3290
                  ? cp < 2558 ? 996 : 997
                  : 998
                : cp < 8045 ? 999 : 1000)

Generated from continuing the previous comment's script.

const arr = [...CPs];
function bin(start, end, depth = 1) {
  const indent = "  ".repeat(depth);
  const mid = (start + end) >> 1;
  return `cp < ${arr[mid][0] + 1}` + (start == mid ? ` ? ${arr[mid][1]} : ${(arr[end] || [,1000])[1]}` : `
${indent}? ${bin(start, mid, depth + 1)}
${indent}: ${mid + 1 < end ? bin(mid + 1, end, depth + 1) : arr[end][1]}`);
}
`win = 0.1 * (${bin(0, arr.length)})`

@oscardssmith
Copy link
Contributor

Yuck

@Mardak
Copy link
Contributor

Mardak commented Jun 9, 2019

Just a sanity check that binary search is faster than sequential…

const test = winPct => {
  const start = performance.now();
  for (let i = 0; i < 1000; i++) {
    for (let j = -12800; j <= 12800; j++) {
      winPct(j);
    }
  }
  return performance.now() - start;
}

[["sequential", cp => .1 * (cp < -8043 ? 0 : cp < -4646 ? 1 : cp < -3288 ? 2 : cp < -2556 ? 3 : cp < -2099 ? 4 : cp < -1787 ? 5 : cp < -1560 ? 6 : cp < -1387 ? 7 : cp < -1251 ? 8 : cp < -1142 ? 9 : cp < -1052 ? 10 : cp < -977 ? 11 : cp < -913 ? 12 : cp < -858 ? 13 : cp < -811 ? 14 : cp < -769 ? 15 : cp < -732 ? 16 : cp < -699 ? 17 : cp < -669 ? 18 : cp < -643 ? 19 : cp < -619 ? 20 : cp < -597 ? 21 : cp < -577 ? 22 : cp < -559 ? 23 : cp < -542 ? 24 : cp < -527 ? 25 : cp < -512 ? 26 : cp < -499 ? 27 : cp < -487 ? 28 : cp < -475 ? 29 : cp < -464 ? 30 : cp < -454 ? 31 : cp < -445 ? 32 : cp < -436 ? 33 : cp < -428 ? 34 : cp < -420 ? 35 : cp < -412 ? 36 : cp < -405 ? 37 : cp < -398 ? 38 : cp < -392 ? 39 : cp < -386 ? 40 : cp < -380 ? 41 : cp < -375 ? 42 : cp < -370 ? 43 : cp < -365 ? 44 : cp < -360 ? 45 : cp < -355 ? 46 : cp < -351 ? 47 : cp < -347 ? 48 : cp < -343 ? 49 : cp < -339 ? 50 : cp < -335 ? 51 : cp < -332 ? 52 : cp < -328 ? 53 : cp < -325 ? 54 : cp < -322 ? 55 : cp < -319 ? 56 : cp < -316 ? 57 : cp < -313 ? 58 : cp < -311 ? 59 : cp < -308 ? 60 : cp < -305 ? 61 : cp < -303 ? 62 : cp < -301 ? 63 : cp < -298 ? 64 : cp < -296 ? 65 : cp < -294 ? 66 : cp < -292 ? 67 : cp < -290 ? 68 : cp < -288 ? 69 : cp < -286 ? 70 : cp < -284 ? 71 : cp < -282 ? 72 : cp < -280 ? 73 : cp < -279 ? 74 : cp < -277 ? 75 : cp < -275 ? 76 : cp < -274 ? 77 : cp < -272 ? 78 : cp < -271 ? 79 : cp < -269 ? 80 : cp < -268 ? 81 : cp < -266 ? 82 : cp < -265 ? 83 : cp < -263 ? 84 : cp < -262 ? 85 : cp < -261 ? 86 : cp < -260 ? 87 : cp < -258 ? 88 : cp < -257 ? 89 : cp < -256 ? 90 : cp < -255 ? 91 : cp < -254 ? 92 : cp < -252 ? 93 : cp < -251 ? 94 : cp < -250 ? 95 : cp < -249 ? 96 : cp < -248 ? 97 : cp < -247 ? 98 : cp < -246 ? 99 : cp < -245 ? 100 : cp < -244 ? 101 : cp < -243 ? 102 : cp < -242 ? 103 : cp < -241 ? 104 : cp < -240 ? 105 : cp < -239 ? 106 : cp < -238 ? 108 : cp < -237 ? 109 : cp < -236 ? 110 : cp < -235 ? 111 : cp < -234 ? 112 : cp < -233 ? 113 : cp < -232 ? 115 : cp < -231 ? 116 : cp < -230 ? 117 : cp < -229 ? 118 : cp < -228 ? 120 : cp < -227 ? 121 : cp < -226 ? 122 : cp < -225 ? 124 : cp < -224 ? 125 : cp < -223 ? 126 : cp < -222 ? 128 : cp < -221 ? 129 : cp < -220 ? 130 : cp < -219 ? 132 : cp < -218 ? 133 : cp < -217 ? 135 : cp < -216 ? 136 : cp < -215 ? 138 : cp < -214 ? 139 : cp < -213 ? 140 : cp < -212 ? 142 : cp < -211 ? 143 : cp < -210 ? 145 : cp < -209 ? 147 : cp < -208 ? 148 : cp < -207 ? 150 : cp < -206 ? 151 : cp < -205 ? 153 : cp < -204 ? 154 : cp < -203 ? 156 : cp < -202 ? 157 : cp < -201 ? 159 : cp < -200 ? 161 : cp < -199 ? 162 : cp < -198 ? 164 : cp < -197 ? 165 : cp < -196 ? 167 : cp < -195 ? 169 : cp < -194 ? 170 : cp < -193 ? 172 : cp < -192 ? 174 : cp < -191 ? 175 : cp < -190 ? 177 : cp < -189 ? 178 : cp < -188 ? 180 : cp < -187 ? 182 : cp < -186 ? 183 : cp < -185 ? 185 : cp < -184 ? 187 : cp < -183 ? 188 : cp < -182 ? 190 : cp < -181 ? 192 : cp < -180 ? 193 : cp < -179 ? 195 : cp < -178 ? 197 : cp < -177 ? 198 : cp < -176 ? 200 : cp < -175 ? 202 : cp < -174 ? 203 : cp < -173 ? 205 : cp < -172 ? 207 : cp < -171 ? 208 : cp < -170 ? 210 : cp < -169 ? 212 : cp < -168 ? 214 : cp < -167 ? 215 : cp < -166 ? 217 : cp < -165 ? 219 : cp < -164 ? 220 : cp < -163 ? 222 : cp < -162 ? 224 : cp < -161 ? 225 : cp < -160 ? 227 : cp < -159 ? 229 : cp < -158 ? 230 : cp < -157 ? 232 : cp < -156 ? 234 : cp < -155 ? 235 : cp < -154 ? 237 : cp < -153 ? 239 : cp < -152 ? 241 : cp < -151 ? 242 : cp < -150 ? 244 : cp < -149 ? 246 : cp < -148 ? 247 : cp < -147 ? 249 : cp < -146 ? 251 : cp < -145 ? 252 : cp < -144 ? 254 : cp < -143 ? 256 : cp < -142 ? 257 : cp < -141 ? 259 : cp < -140 ? 261 : cp < -139 ? 263 : cp < -138 ? 264 : cp < -137 ? 266 : cp < -136 ? 268 : cp < -135 ? 269 : cp < -134 ? 271 : cp < -133 ? 273 : cp < -132 ? 274 : cp < -131 ? 276 : cp < -130 ? 278 : cp < -129 ? 280 : cp < -128 ? 281 : cp < -127 ? 283 : cp < -126 ? 285 : cp < -125 ? 286 : cp < -124 ? 288 : cp < -123 ? 290 : cp < -122 ? 291 : cp < -121 ? 293 : cp < -120 ? 295 : cp < -119 ? 296 : cp < -118 ? 298 : cp < -117 ? 300 : cp < -116 ? 302 : cp < -115 ? 303 : cp < -114 ? 305 : cp < -113 ? 307 : cp < -112 ? 308 : cp < -111 ? 310 : cp < -110 ? 312 : cp < -109 ? 313 : cp < -108 ? 315 : cp < -107 ? 317 : cp < -106 ? 318 : cp < -105 ? 320 : cp < -104 ? 322 : cp < -103 ? 324 : cp < -102 ? 325 : cp < -101 ? 327 : cp < -100 ? 329 : cp < -99 ? 330 : cp < -98 ? 332 : cp < -97 ? 334 : cp < -96 ? 335 : cp < -95 ? 337 : cp < -94 ? 339 : cp < -93 ? 341 : cp < -92 ? 342 : cp < -91 ? 344 : cp < -90 ? 346 : cp < -89 ? 347 : cp < -88 ? 349 : cp < -87 ? 351 : cp < -86 ? 352 : cp < -85 ? 354 : cp < -84 ? 356 : cp < -83 ? 357 : cp < -82 ? 359 : cp < -81 ? 361 : cp < -80 ? 363 : cp < -79 ? 364 : cp < -78 ? 366 : cp < -77 ? 368 : cp < -76 ? 369 : cp < -75 ? 371 : cp < -74 ? 373 : cp < -73 ? 374 : cp < -72 ? 376 : cp < -71 ? 378 : cp < -70 ? 380 : cp < -69 ? 381 : cp < -68 ? 383 : cp < -67 ? 385 : cp < -66 ? 386 : cp < -65 ? 388 : cp < -64 ? 390 : cp < -63 ? 391 : cp < -62 ? 393 : cp < -61 ? 395 : cp < -60 ? 396 : cp < -59 ? 398 : cp < -58 ? 400 : cp < -57 ? 402 : cp < -56 ? 403 : cp < -55 ? 405 : cp < -54 ? 407 : cp < -53 ? 408 : cp < -52 ? 410 : cp < -51 ? 412 : cp < -50 ? 413 : cp < -49 ? 415 : cp < -48 ? 417 : cp < -47 ? 418 : cp < -46 ? 420 : cp < -45 ? 422 : cp < -44 ? 424 : cp < -43 ? 425 : cp < -42 ? 427 : cp < -41 ? 429 : cp < -40 ? 430 : cp < -39 ? 432 : cp < -38 ? 434 : cp < -37 ? 435 : cp < -36 ? 437 : cp < -35 ? 439 : cp < -34 ? 441 : cp < -33 ? 442 : cp < -32 ? 444 : cp < -31 ? 446 : cp < -30 ? 447 : cp < -29 ? 449 : cp < -28 ? 451 : cp < -27 ? 452 : cp < -26 ? 454 : cp < -25 ? 456 : cp < -24 ? 457 : cp < -23 ? 459 : cp < -22 ? 461 : cp < -21 ? 463 : cp < -20 ? 464 : cp < -19 ? 466 : cp < -18 ? 468 : cp < -17 ? 469 : cp < -16 ? 471 : cp < -15 ? 473 : cp < -14 ? 474 : cp < -13 ? 476 : cp < -12 ? 478 : cp < -11 ? 480 : cp < -10 ? 481 : cp < -9 ? 483 : cp < -8 ? 485 : cp < -7 ? 486 : cp < -6 ? 488 : cp < -5 ? 490 : cp < -4 ? 491 : cp < -3 ? 493 : cp < -2 ? 495 : cp < -1 ? 496 : cp < 0 ? 498 : cp < 1 ? 500 : cp < 2 ? 502 : cp < 3 ? 503 : cp < 4 ? 505 : cp < 5 ? 507 : cp < 6 ? 508 : cp < 7 ? 510 : cp < 8 ? 512 : cp < 9 ? 513 : cp < 10 ? 515 : cp < 11 ? 517 : cp < 12 ? 518 : cp < 13 ? 520 : cp < 14 ? 522 : cp < 15 ? 524 : cp < 16 ? 525 : cp < 17 ? 527 : cp < 18 ? 529 : cp < 19 ? 530 : cp < 20 ? 532 : cp < 21 ? 534 : cp < 22 ? 535 : cp < 23 ? 537 : cp < 24 ? 539 : cp < 25 ? 541 : cp < 26 ? 542 : cp < 27 ? 544 : cp < 28 ? 546 : cp < 29 ? 547 : cp < 30 ? 549 : cp < 31 ? 551 : cp < 32 ? 552 : cp < 33 ? 554 : cp < 34 ? 556 : cp < 35 ? 557 : cp < 36 ? 559 : cp < 37 ? 561 : cp < 38 ? 563 : cp < 39 ? 564 : cp < 40 ? 566 : cp < 41 ? 568 : cp < 42 ? 569 : cp < 43 ? 571 : cp < 44 ? 573 : cp < 45 ? 574 : cp < 46 ? 576 : cp < 47 ? 578 : cp < 48 ? 580 : cp < 49 ? 581 : cp < 50 ? 583 : cp < 51 ? 585 : cp < 52 ? 586 : cp < 53 ? 588 : cp < 54 ? 590 : cp < 55 ? 591 : cp < 56 ? 593 : cp < 57 ? 595 : cp < 58 ? 596 : cp < 59 ? 598 : cp < 60 ? 600 : cp < 61 ? 602 : cp < 62 ? 603 : cp < 63 ? 605 : cp < 64 ? 607 : cp < 65 ? 608 : cp < 66 ? 610 : cp < 67 ? 612 : cp < 68 ? 613 : cp < 69 ? 615 : cp < 70 ? 617 : cp < 71 ? 618 : cp < 72 ? 620 : cp < 73 ? 622 : cp < 74 ? 624 : cp < 75 ? 625 : cp < 76 ? 627 : cp < 77 ? 629 : cp < 78 ? 630 : cp < 79 ? 632 : cp < 80 ? 634 : cp < 81 ? 635 : cp < 82 ? 637 : cp < 83 ? 639 : cp < 84 ? 641 : cp < 85 ? 642 : cp < 86 ? 644 : cp < 87 ? 646 : cp < 88 ? 647 : cp < 89 ? 649 : cp < 90 ? 651 : cp < 91 ? 652 : cp < 92 ? 654 : cp < 93 ? 656 : cp < 94 ? 657 : cp < 95 ? 659 : cp < 96 ? 661 : cp < 97 ? 663 : cp < 98 ? 664 : cp < 99 ? 666 : cp < 100 ? 668 : cp < 101 ? 669 : cp < 102 ? 671 : cp < 103 ? 673 : cp < 104 ? 674 : cp < 105 ? 676 : cp < 106 ? 678 : cp < 107 ? 680 : cp < 108 ? 681 : cp < 109 ? 683 : cp < 110 ? 685 : cp < 111 ? 686 : cp < 112 ? 688 : cp < 113 ? 690 : cp < 114 ? 691 : cp < 115 ? 693 : cp < 116 ? 695 : cp < 117 ? 696 : cp < 118 ? 698 : cp < 119 ? 700 : cp < 120 ? 702 : cp < 121 ? 703 : cp < 122 ? 705 : cp < 123 ? 707 : cp < 124 ? 708 : cp < 125 ? 710 : cp < 126 ? 712 : cp < 127 ? 713 : cp < 128 ? 715 : cp < 129 ? 717 : cp < 130 ? 718 : cp < 131 ? 720 : cp < 132 ? 722 : cp < 133 ? 724 : cp < 134 ? 725 : cp < 135 ? 727 : cp < 136 ? 729 : cp < 137 ? 730 : cp < 138 ? 732 : cp < 139 ? 734 : cp < 140 ? 735 : cp < 141 ? 737 : cp < 142 ? 739 : cp < 143 ? 741 : cp < 144 ? 742 : cp < 145 ? 744 : cp < 146 ? 746 : cp < 147 ? 747 : cp < 148 ? 749 : cp < 149 ? 751 : cp < 150 ? 752 : cp < 151 ? 754 : cp < 152 ? 756 : cp < 153 ? 757 : cp < 154 ? 759 : cp < 155 ? 761 : cp < 156 ? 763 : cp < 157 ? 764 : cp < 158 ? 766 : cp < 159 ? 768 : cp < 160 ? 769 : cp < 161 ? 771 : cp < 162 ? 773 : cp < 163 ? 774 : cp < 164 ? 776 : cp < 165 ? 778 : cp < 166 ? 779 : cp < 167 ? 781 : cp < 168 ? 783 : cp < 169 ? 784 : cp < 170 ? 786 : cp < 171 ? 788 : cp < 172 ? 790 : cp < 173 ? 791 : cp < 174 ? 793 : cp < 175 ? 795 : cp < 176 ? 796 : cp < 177 ? 798 : cp < 178 ? 800 : cp < 179 ? 801 : cp < 180 ? 803 : cp < 181 ? 805 : cp < 182 ? 806 : cp < 183 ? 808 : cp < 184 ? 810 : cp < 185 ? 811 : cp < 186 ? 813 : cp < 187 ? 815 : cp < 188 ? 816 : cp < 189 ? 818 : cp < 190 ? 820 : cp < 191 ? 821 : cp < 192 ? 823 : cp < 193 ? 824 : cp < 194 ? 826 : cp < 195 ? 828 : cp < 196 ? 829 : cp < 197 ? 831 : cp < 198 ? 833 : cp < 199 ? 834 : cp < 200 ? 836 : cp < 201 ? 837 : cp < 202 ? 839 : cp < 203 ? 841 : cp < 204 ? 842 : cp < 205 ? 844 : cp < 206 ? 845 : cp < 207 ? 847 : cp < 208 ? 848 : cp < 209 ? 850 : cp < 210 ? 851 : cp < 211 ? 853 : cp < 212 ? 855 : cp < 213 ? 856 : cp < 214 ? 858 : cp < 215 ? 859 : cp < 216 ? 860 : cp < 217 ? 862 : cp < 218 ? 863 : cp < 219 ? 865 : cp < 220 ? 866 : cp < 221 ? 868 : cp < 222 ? 869 : cp < 223 ? 870 : cp < 224 ? 872 : cp < 225 ? 873 : cp < 226 ? 874 : cp < 227 ? 876 : cp < 228 ? 877 : cp < 229 ? 878 : cp < 230 ? 880 : cp < 231 ? 881 : cp < 232 ? 882 : cp < 233 ? 883 : cp < 234 ? 885 : cp < 235 ? 886 : cp < 236 ? 887 : cp < 237 ? 888 : cp < 238 ? 889 : cp < 239 ? 890 : cp < 240 ? 892 : cp < 241 ? 893 : cp < 242 ? 894 : cp < 243 ? 895 : cp < 244 ? 896 : cp < 245 ? 897 : cp < 246 ? 898 : cp < 247 ? 899 : cp < 248 ? 900 : cp < 249 ? 901 : cp < 250 ? 902 : cp < 251 ? 903 : cp < 252 ? 904 : cp < 253 ? 905 : cp < 254 ? 906 : cp < 256 ? 907 : cp < 257 ? 908 : cp < 258 ? 909 : cp < 259 ? 910 : cp < 260 ? 911 : cp < 262 ? 912 : cp < 263 ? 913 : cp < 264 ? 914 : cp < 265 ? 915 : cp < 267 ? 916 : cp < 268 ? 917 : cp < 270 ? 918 : cp < 271 ? 919 : cp < 273 ? 920 : cp < 274 ? 921 : cp < 276 ? 922 : cp < 277 ? 923 : cp < 279 ? 924 : cp < 281 ? 925 : cp < 282 ? 926 : cp < 284 ? 927 : cp < 286 ? 928 : cp < 288 ? 929 : cp < 290 ? 930 : cp < 292 ? 931 : cp < 294 ? 932 : cp < 296 ? 933 : cp < 298 ? 934 : cp < 300 ? 935 : cp < 303 ? 936 : cp < 305 ? 937 : cp < 307 ? 938 : cp < 310 ? 939 : cp < 313 ? 940 : cp < 315 ? 941 : cp < 318 ? 942 : cp < 321 ? 943 : cp < 324 ? 944 : cp < 327 ? 945 : cp < 330 ? 946 : cp < 334 ? 947 : cp < 337 ? 948 : cp < 341 ? 949 : cp < 345 ? 950 : cp < 349 ? 951 : cp < 353 ? 952 : cp < 357 ? 953 : cp < 362 ? 954 : cp < 367 ? 955 : cp < 372 ? 956 : cp < 377 ? 957 : cp < 382 ? 958 : cp < 388 ? 959 : cp < 394 ? 960 : cp < 400 ? 961 : cp < 407 ? 962 : cp < 414 ? 963 : cp < 422 ? 964 : cp < 430 ? 965 : cp < 438 ? 966 : cp < 447 ? 967 : cp < 456 ? 968 : cp < 466 ? 969 : cp < 477 ? 970 : cp < 489 ? 971 : cp < 501 ? 972 : cp < 514 ? 973 : cp < 529 ? 974 : cp < 544 ? 975 : cp < 561 ? 976 : cp < 579 ? 977 : cp < 599 ? 978 : cp < 621 ? 979 : cp < 645 ? 980 : cp < 671 ? 981 : cp < 701 ? 982 : cp < 734 ? 983 : cp < 771 ? 984 : cp < 813 ? 985 : cp < 860 ? 986 : cp < 915 ? 987 : cp < 979 ? 988 : cp < 1054 ? 989 : cp < 1144 ? 990 : cp < 1253 ? 991 : cp < 1389 ? 992 : cp < 1562 ? 993 : cp < 1789 ? 994 : cp < 2101 ? 995 : cp < 2558 ? 996 : cp < 3290 ? 997 : cp < 4648 ? 998 : cp < 8045 ? 999 : 1000)],
 ["binary", cp => .1 * (cp < 1 ? cp < -172 ? cp < -261 ? cp < -370 ? cp < -597 ? cp < -1052 ? cp < -1787 ? cp < -3288 ? cp < -4646 ? cp < -8043 ? 0 : 1 : 2 : cp < -2099 ? cp < -2556 ? 3 : 4 : 5 : cp < -1251 ? cp < -1387 ? cp < -1560 ? 6 : 7 : 8 : cp < -1142 ? 9 : 10 : cp < -732 ? cp < -858 ? cp < -913 ? cp < -977 ? 11 : 12 : 13 : cp < -769 ? cp < -811 ? 14 : 15 : 16 : cp < -643 ? cp < -669 ? cp < -699 ? 17 : 18 : 19 : cp < -619 ? 20 : 21 : cp < -445 ? cp < -499 ? cp < -542 ? cp < -559 ? cp < -577 ? 22 : 23 : 24 : cp < -512 ? cp < -527 ? 25 : 26 : 27 : cp < -464 ? cp < -475 ? cp < -487 ? 28 : 29 : 30 : cp < -454 ? 31 : 32 : cp < -398 ? cp < -420 ? cp < -428 ? cp < -436 ? 33 : 34 : 35 : cp < -405 ? cp < -412 ? 36 : 37 : 38 : cp < -380 ? cp < -386 ? cp < -392 ? 39 : 40 : 41 : cp < -375 ? 42 : 43 : cp < -296 ? cp < -325 ? cp < -343 ? cp < -355 ? cp < -360 ? cp < -365 ? 44 : 45 : 46 : cp < -347 ? cp < -351 ? 47 : 48 : 49 : cp < -332 ? cp < -335 ? cp < -339 ? 50 : 51 : 52 : cp < -328 ? 53 : 54 : cp < -308 ? cp < -316 ? cp < -319 ? cp < -322 ? 55 : 56 : 57 : cp < -311 ? cp < -313 ? 58 : 59 : 60 : cp < -301 ? cp < -303 ? cp < -305 ? 61 : 62 : 63 : cp < -298 ? 64 : 65 : cp < -275 ? cp < -284 ? cp < -290 ? cp < -292 ? cp < -294 ? 66 : 67 : 68 : cp < -286 ? cp < -288 ? 69 : 70 : 71 : cp < -279 ? cp < -280 ? cp < -282 ? 72 : 73 : 74 : cp < -277 ? 75 : 76 : cp < -268 ? cp < -271 ? cp < -272 ? cp < -274 ? 77 : 78 : 79 : cp < -269 ? 80 : 81 : cp < -263 ? cp < -265 ? cp < -266 ? 82 : 83 : 84 : cp < -262 ? 85 : 86 : cp < -215 ? cp < -237 ? cp < -248 ? cp < -254 ? cp < -257 ? cp < -258 ? cp < -260 ? 87 : 88 : 89 : cp < -255 ? cp < -256 ? 90 : 91 : 92 : cp < -250 ? cp < -251 ? cp < -252 ? 93 : 94 : 95 : cp < -249 ? 96 : 97 : cp < -242 ? cp < -245 ? cp < -246 ? cp < -247 ? 98 : 99 : 100 : cp < -243 ? cp < -244 ? 101 : 102 : 103 : cp < -239 ? cp < -240 ? cp < -241 ? 104 : 105 : 106 : cp < -238 ? 108 : 109 : cp < -226 ? cp < -231 ? cp < -234 ? cp < -235 ? cp < -236 ? 110 : 111 : 112 : cp < -232 ? cp < -233 ? 113 : 115 : 116 : cp < -228 ? cp < -229 ? cp < -230 ? 117 : 118 : 120 : cp < -227 ? 121 : 122 : cp < -220 ? cp < -223 ? cp < -224 ? cp < -225 ? 124 : 125 : 126 : cp < -221 ? cp < -222 ? 128 : 129 : 130 : cp < -217 ? cp < -218 ? cp < -219 ? 132 : 133 : 135 : cp < -216 ? 136 : 138 : cp < -193 ? cp < -204 ? cp < -209 ? cp < -212 ? cp < -213 ? cp < -214 ? 139 : 140 : 142 : cp < -210 ? cp < -211 ? 143 : 145 : 147 : cp < -206 ? cp < -207 ? cp < -208 ? 148 : 150 : 151 : cp < -205 ? 153 : 154 : cp < -198 ? cp < -201 ? cp < -202 ? cp < -203 ? 156 : 157 : 159 : cp < -199 ? cp < -200 ? 161 : 162 : 164 : cp < -195 ? cp < -196 ? cp < -197 ? 165 : 167 : 169 : cp < -194 ? 170 : 172 : cp < -182 ? cp < -187 ? cp < -190 ? cp < -191 ? cp < -192 ? 174 : 175 : 177 : cp < -188 ? cp < -189 ? 178 : 180 : 182 : cp < -184 ? cp < -185 ? cp < -186 ? 183 : 185 : 187 : cp < -183 ? 188 : 190 : cp < -177 ? cp < -179 ? cp < -180 ? cp < -181 ? 192 : 193 : 195 : cp < -178 ? 197 : 198 : cp < -174 ? cp < -175 ? cp < -176 ? 200 : 202 : 203 : cp < -173 ? 205 : 207 : cp < -85 ? cp < -128 ? cp < -150 ? cp < -161 ? cp < -166 ? cp < -169 ? cp < -170 ? cp < -171 ? 208 : 210 : 212 : cp < -167 ? cp < -168 ? 214 : 215 : 217 : cp < -163 ? cp < -164 ? cp < -165 ? 219 : 220 : 222 : cp < -162 ? 224 : 225 : cp < -155 ? cp < -158 ? cp < -159 ? cp < -160 ? 227 : 229 : 230 : cp < -156 ? cp < -157 ? 232 : 234 : 235 : cp < -152 ? cp < -153 ? cp < -154 ? 237 : 239 : 241 : cp < -151 ? 242 : 244 : cp < -139 ? cp < -144 ? cp < -147 ? cp < -148 ? cp < -149 ? 246 : 247 : 249 : cp < -145 ? cp < -146 ? 251 : 252 : 254 : cp < -141 ? cp < -142 ? cp < -143 ? 256 : 257 : 259 : cp < -140 ? 261 : 263 : cp < -133 ? cp < -136 ? cp < -137 ? cp < -138 ? 264 : 266 : 268 : cp < -134 ? cp < -135 ? 269 : 271 : 273 : cp < -130 ? cp < -131 ? cp < -132 ? 274 : 276 : 278 : cp < -129 ? 280 : 281 : cp < -106 ? cp < -117 ? cp < -122 ? cp < -125 ? cp < -126 ? cp < -127 ? 283 : 285 : 286 : cp < -123 ? cp < -124 ? 288 : 290 : 291 : cp < -119 ? cp < -120 ? cp < -121 ? 293 : 295 : 296 : cp < -118 ? 298 : 300 : cp < -111 ? cp < -114 ? cp < -115 ? cp < -116 ? 302 : 303 : 305 : cp < -112 ? cp < -113 ? 307 : 308 : 310 : cp < -108 ? cp < -109 ? cp < -110 ? 312 : 313 : 315 : cp < -107 ? 317 : 318 : cp < -95 ? cp < -100 ? cp < -103 ? cp < -104 ? cp < -105 ? 320 : 322 : 324 : cp < -101 ? cp < -102 ? 325 : 327 : 329 : cp < -97 ? cp < -98 ? cp < -99 ? 330 : 332 : 334 : cp < -96 ? 335 : 337 : cp < -90 ? cp < -92 ? cp < -93 ? cp < -94 ? 339 : 341 : 342 : cp < -91 ? 344 : 346 : cp < -87 ? cp < -88 ? cp < -89 ? 347 : 349 : 351 : cp < -86 ? 352 : 354 : cp < -42 ? cp < -63 ? cp < -74 ? cp < -79 ? cp < -82 ? cp < -83 ? cp < -84 ? 356 : 357 : 359 : cp < -80 ? cp < -81 ? 361 : 363 : 364 : cp < -76 ? cp < -77 ? cp < -78 ? 366 : 368 : 369 : cp < -75 ? 371 : 373 : cp < -68 ? cp < -71 ? cp < -72 ? cp < -73 ? 374 : 376 : 378 : cp < -69 ? cp < -70 ? 380 : 381 : 383 : cp < -65 ? cp < -66 ? cp < -67 ? 385 : 386 : 388 : cp < -64 ? 390 : 391 : cp < -52 ? cp < -57 ? cp < -60 ? cp < -61 ? cp < -62 ? 393 : 395 : 396 : cp < -58 ? cp < -59 ? 398 : 400 : 402 : cp < -54 ? cp < -55 ? cp < -56 ? 403 : 405 : 407 : cp < -53 ? 408 : 410 : cp < -47 ? cp < -49 ? cp < -50 ? cp < -51 ? 412 : 413 : 415 : cp < -48 ? 417 : 418 : cp < -44 ? cp < -45 ? cp < -46 ? 420 : 422 : 424 : cp < -43 ? 425 : 427 : cp < -20 ? cp < -31 ? cp < -36 ? cp < -39 ? cp < -40 ? cp < -41 ? 429 : 430 : 432 : cp < -37 ? cp < -38 ? 434 : 435 : 437 : cp < -33 ? cp < -34 ? cp < -35 ? 439 : 441 : 442 : cp < -32 ? 444 : 446 : cp < -25 ? cp < -28 ? cp < -29 ? cp < -30 ? 447 : 449 : 451 : cp < -26 ? cp < -27 ? 452 : 454 : 456 : cp < -22 ? cp < -23 ? cp < -24 ? 457 : 459 : 461 : cp < -21 ? 463 : 464 : cp < -9 ? cp < -14 ? cp < -17 ? cp < -18 ? cp < -19 ? 466 : 468 : 469 : cp < -15 ? cp < -16 ? 471 : 473 : 474 : cp < -11 ? cp < -12 ? cp < -13 ? 476 : 478 : 480 : cp < -10 ? 481 : 483 : cp < -4 ? cp < -6 ? cp < -7 ? cp < -8 ? 485 : 486 : 488 : cp < -5 ? 490 : 491 : cp < -1 ? cp < -2 ? cp < -3 ? 493 : 495 : 496 : cp < 0 ? 498 : 500 : cp < 175 ? cp < 88 ? cp < 45 ? cp < 23 ? cp < 12 ? cp < 7 ? cp < 4 ? cp < 3 ? cp < 2 ? 502 : 503 : 505 : cp < 6 ? cp < 5 ? 507 : 508 : 510 : cp < 10 ? cp < 9 ? cp < 8 ? 512 : 513 : 515 : cp < 11 ? 517 : 518 : cp < 18 ? cp < 15 ? cp < 14 ? cp < 13 ? 520 : 522 : 524 : cp < 17 ? cp < 16 ? 525 : 527 : 529 : cp < 21 ? cp < 20 ? cp < 19 ? 530 : 532 : 534 : cp < 22 ? 535 : 537 : cp < 34 ? cp < 29 ? cp < 26 ? cp < 25 ? cp < 24 ? 539 : 541 : 542 : cp < 28 ? cp < 27 ? 544 : 546 : 547 : cp < 32 ? cp < 31 ? cp < 30 ? 549 : 551 : 552 : cp < 33 ? 554 : 556 : cp < 40 ? cp < 37 ? cp < 36 ? cp < 35 ? 557 : 559 : 561 : cp < 39 ? cp < 38 ? 563 : 564 : 566 : cp < 43 ? cp < 42 ? cp < 41 ? 568 : 569 : 571 : cp < 44 ? 573 : 574 : cp < 67 ? cp < 56 ? cp < 51 ? cp < 48 ? cp < 47 ? cp < 46 ? 576 : 578 : 580 : cp < 50 ? cp < 49 ? 581 : 583 : 585 : cp < 54 ? cp < 53 ? cp < 52 ? 586 : 588 : 590 : cp < 55 ? 591 : 593 : cp < 62 ? cp < 59 ? cp < 58 ? cp < 57 ? 595 : 596 : 598 : cp < 61 ? cp < 60 ? 600 : 602 : 603 : cp < 65 ? cp < 64 ? cp < 63 ? 605 : 607 : 608 : cp < 66 ? 610 : 612 : cp < 78 ? cp < 73 ? cp < 70 ? cp < 69 ? cp < 68 ? 613 : 615 : 617 : cp < 72 ? cp < 71 ? 618 : 620 : 622 : cp < 76 ? cp < 75 ? cp < 74 ? 624 : 625 : 627 : cp < 77 ? 629 : 630 : cp < 83 ? cp < 81 ? cp < 80 ? cp < 79 ? 632 : 634 : 635 : cp < 82 ? 637 : 639 : cp < 86 ? cp < 85 ? cp < 84 ? 641 : 642 : 644 : cp < 87 ? 646 : 647 : cp < 132 ? cp < 110 ? cp < 99 ? cp < 94 ? cp < 91 ? cp < 90 ? cp < 89 ? 649 : 651 : 652 : cp < 93 ? cp < 92 ? 654 : 656 : 657 : cp < 97 ? cp < 96 ? cp < 95 ? 659 : 661 : 663 : cp < 98 ? 664 : 666 : cp < 105 ? cp < 102 ? cp < 101 ? cp < 100 ? 668 : 669 : 671 : cp < 104 ? cp < 103 ? 673 : 674 : 676 : cp < 108 ? cp < 107 ? cp < 106 ? 678 : 680 : 681 : cp < 109 ? 683 : 685 : cp < 121 ? cp < 116 ? cp < 113 ? cp < 112 ? cp < 111 ? 686 : 688 : 690 : cp < 115 ? cp < 114 ? 691 : 693 : 695 : cp < 119 ? cp < 118 ? cp < 117 ? 696 : 698 : 700 : cp < 120 ? 702 : 703 : cp < 127 ? cp < 124 ? cp < 123 ? cp < 122 ? 705 : 707 : 708 : cp < 126 ? cp < 125 ? 710 : 712 : 713 : cp < 130 ? cp < 129 ? cp < 128 ? 715 : 717 : 718 : cp < 131 ? 720 : 722 : cp < 154 ? cp < 143 ? cp < 138 ? cp < 135 ? cp < 134 ? cp < 133 ? 724 : 725 : 727 : cp < 137 ? cp < 136 ? 729 : 730 : 732 : cp < 141 ? cp < 140 ? cp < 139 ? 734 : 735 : 737 : cp < 142 ? 739 : 741 : cp < 149 ? cp < 146 ? cp < 145 ? cp < 144 ? 742 : 744 : 746 : cp < 148 ? cp < 147 ? 747 : 749 : 751 : cp < 152 ? cp < 151 ? cp < 150 ? 752 : 754 : 756 : cp < 153 ? 757 : 759 : cp < 165 ? cp < 160 ? cp < 157 ? cp < 156 ? cp < 155 ? 761 : 763 : 764 : cp < 159 ? cp < 158 ? 766 : 768 : 769 : cp < 163 ? cp < 162 ? cp < 161 ? 771 : 773 : 774 : cp < 164 ? 776 : 778 : cp < 170 ? cp < 168 ? cp < 167 ? cp < 166 ? 779 : 781 : 783 : cp < 169 ? 784 : 786 : cp < 173 ? cp < 172 ? cp < 171 ? 788 : 790 : 791 : cp < 174 ? 793 : 795 : cp < 264 ? cp < 219 ? cp < 197 ? cp < 186 ? cp < 181 ? cp < 178 ? cp < 177 ? cp < 176 ? 796 : 798 : 800 : cp < 180 ? cp < 179 ? 801 : 803 : 805 : cp < 184 ? cp < 183 ? cp < 182 ? 806 : 808 : 810 : cp < 185 ? 811 : 813 : cp < 192 ? cp < 189 ? cp < 188 ? cp < 187 ? 815 : 816 : 818 : cp < 191 ? cp < 190 ? 820 : 821 : 823 : cp < 195 ? cp < 194 ? cp < 193 ? 824 : 826 : 828 : cp < 196 ? 829 : 831 : cp < 208 ? cp < 203 ? cp < 200 ? cp < 199 ? cp < 198 ? 833 : 834 : 836 : cp < 202 ? cp < 201 ? 837 : 839 : 841 : cp < 206 ? cp < 205 ? cp < 204 ? 842 : 844 : 845 : cp < 207 ? 847 : 848 : cp < 214 ? cp < 211 ? cp < 210 ? cp < 209 ? 850 : 851 : 853 : cp < 213 ? cp < 212 ? 855 : 856 : 858 : cp < 217 ? cp < 216 ? cp < 215 ? 859 : 860 : 862 : cp < 218 ? 863 : 865 : cp < 241 ? cp < 230 ? cp < 225 ? cp < 222 ? cp < 221 ? cp < 220 ? 866 : 868 : 869 : cp < 224 ? cp < 223 ? 870 : 872 : 873 : cp < 228 ? cp < 227 ? cp < 226 ? 874 : 876 : 877 : cp < 229 ? 878 : 880 : cp < 236 ? cp < 233 ? cp < 232 ? cp < 231 ? 881 : 882 : 883 : cp < 235 ? cp < 234 ? 885 : 886 : 887 : cp < 239 ? cp < 238 ? cp < 237 ? 888 : 889 : 890 : cp < 240 ? 892 : 893 : cp < 252 ? cp < 247 ? cp < 244 ? cp < 243 ? cp < 242 ? 894 : 895 : 896 : cp < 246 ? cp < 245 ? 897 : 898 : 899 : cp < 250 ? cp < 249 ? cp < 248 ? 900 : 901 : 902 : cp < 251 ? 903 : 904 : cp < 258 ? cp < 256 ? cp < 254 ? cp < 253 ? 905 : 906 : 907 : cp < 257 ? 908 : 909 : cp < 262 ? cp < 260 ? cp < 259 ? 910 : 911 : 912 : cp < 263 ? 913 : 914 : cp < 377 ? cp < 303 ? cp < 281 ? cp < 273 ? cp < 268 ? cp < 267 ? cp < 265 ? 915 : 916 : 917 : cp < 271 ? cp < 270 ? 918 : 919 : 920 : cp < 277 ? cp < 276 ? cp < 274 ? 921 : 922 : 923 : cp < 279 ? 924 : 925 : cp < 292 ? cp < 286 ? cp < 284 ? cp < 282 ? 926 : 927 : 928 : cp < 290 ? cp < 288 ? 929 : 930 : 931 : cp < 298 ? cp < 296 ? cp < 294 ? 932 : 933 : 934 : cp < 300 ? 935 : 936 : cp < 334 ? cp < 318 ? cp < 310 ? cp < 307 ? cp < 305 ? 937 : 938 : 939 : cp < 315 ? cp < 313 ? 940 : 941 : 942 : cp < 327 ? cp < 324 ? cp < 321 ? 943 : 944 : 945 : cp < 330 ? 946 : 947 : cp < 353 ? cp < 345 ? cp < 341 ? cp < 337 ? 948 : 949 : 950 : cp < 349 ? 951 : 952 : cp < 367 ? cp < 362 ? cp < 357 ? 953 : 954 : 955 : cp < 372 ? 956 : 957 : cp < 621 ? cp < 456 ? cp < 414 ? cp < 394 ? cp < 388 ? cp < 382 ? 958 : 959 : 960 : cp < 407 ? cp < 400 ? 961 : 962 : 963 : cp < 438 ? cp < 430 ? cp < 422 ? 964 : 965 : 966 : cp < 447 ? 967 : 968 : cp < 529 ? cp < 489 ? cp < 477 ? cp < 466 ? 969 : 970 : 971 : cp < 514 ? cp < 501 ? 972 : 973 : 974 : cp < 579 ? cp < 561 ? cp < 544 ? 975 : 976 : 977 : cp < 599 ? 978 : 979 : cp < 1144 ? cp < 813 ? cp < 701 ? cp < 671 ? cp < 645 ? 980 : 981 : 982 : cp < 771 ? cp < 734 ? 983 : 984 : 985 : cp < 979 ? cp < 915 ? cp < 860 ? 986 : 987 : 988 : cp < 1054 ? 989 : 990 : cp < 2101 ? cp < 1562 ? cp < 1389 ? cp < 1253 ? 991 : 992 : 993 : cp < 1789 ? 994 : 995 : cp < 4648 ? cp < 3290 ? cp < 2558 ? 996 : 997 : 998 : cp < 8045 ? 999 : 1000)],
 ["atan", cp => ((((Math.atan((cp * 100)/290.680623072))/3.096181612)+0.5) * 100)-50],
].forEach(([name, func]) => console.log(name, test(func), test(func)))

Firefox
sequential 4691 4406
binary 174 131
atan 2308 2252

Chrome
sequential 2708.325000014156 2387.5750000588596
binary 265.78999997582287 225.2999999327585
atan 588.0550000583753 576.4300000155345

Safari
sequential – 2178 – 1649.999999999999
binary – 534 – 485
atan – 811 – 787

Edit: added a second test(func) to compare cold vs already hot

@AlexisOlson
Copy link
Contributor Author

AlexisOlson commented Jun 9, 2019

Here's a rational function approximation that works reasonably well in the -/+ 12 pawns range corresponding to between 1% and 99% win probability:

(0.49999999867035255 + 0.003324487948865767 x + 
   1.3749377280937592*10^-6 x^2 - 5.683754498461971*10^-8 x^3 - 
   7.929431905444473*10^-11 x^4 + 1.1119342542081621*10^-12 x^5 + 
   7.023064445709004*10^-15 x^6 + 2.0160272052770598*10^-17 x^7 + 
   4.4186280031504765*10^-20 x^8 + 3.412407532286887*10^-23 x^9 + 
   3.8484785817532613*10^-26 x^10 - 3.8038474994993546*10^-29 x^11 - 
   3.955060177817417*10^-32 x^12 - 4.420909780918585*10^-35 x^13 - 
   2.2472518802783445*10^-38 x^14 + 1.0079182404987127*10^-41 x^15 + 
   7.210981268357154*10^-45 x^16 + 7.053697364003403*10^-48 x^17 + 
   1.971740296093094*10^-51 x^18 + 3.980751891588571*10^-55 x^19 + 
   3.411651771234807*10^-59 x^20)/(1 + 0.00314805159706706 x - 
   9.093045646948943*10^-6 x^2 - 6.773222189450036*10^-8 x^3 + 
   2.5617020280801913*10^-10 x^4 + 9.84772396598122*10^-13 x^5 + 
   3.1844320597107787*10^-15 x^6 + 2.980250588719678*10^-17 x^7 + 
   8.718942729097744*10^-20 x^8 - 2.5811584453853195*10^-22 x^9 + 
   8.701141337098568*10^-25 x^10 - 1.4793725450955382*10^-27 x^11 + 
   1.5705404928918895*10^-30 x^12 - 1.1106885996264976*10^-33 x^13 + 
   1.4893522772275427*10^-37 x^14 + 4.450130795844106*10^-40 x^15 - 
   5.008256532236164*10^-43 x^16 + 3.0227706520281935*10^-46 x^17 - 
   1.0038570600046546*10^-49 x^18 + 2.0650531476975775*10^-53 x^19 - 
   1.7397053101274427*10^-57 x^20)

@mooskagh
Copy link
Member

mooskagh commented Jun 9, 2019

Good, let's make TCEC use it. :)

Currently it outputs value of 127.99 pawns for Q=1.0.
Would it be possible to tweak it so that it outputs 128.00?

@AlexisOlson
Copy link
Contributor Author

AlexisOlson commented Jun 9, 2019

Here's one that works for -12,800 centipawns to zero with a worst-case error around 2*10^-6.

Win(x) =
(0.5000000176535154 + 0.012937833148154361 x + 
   0.00015873386401407807` x^2 + 1.2197822521659765*10^-6 x^3 + 
   6.5608461483339786*10^-9 x^4 + 2.617700671026159*10^-11 x^5 + 
   8.020078109943085*10^-14 x^6 + 1.9287894261260118*10^-16 x^7 + 
   3.7019776986068855*10^-19 x^8 + 5.767206482291277*10^-22 x^9 + 
   7.476100356648073*10^-25 x^10 + 8.020974240506114*10^-28 x^11 + 
   5.492029115264135*10^-31 x^12 - 2.548939823895937*10^-34 x^13 - 
   2.8990925212935896*10^-37 x^14 + 5.940726342469924*10^-41 x^15 - 
   2.4091252753264207*10^-45 x^16 - 1.551833717430926*10^-47 x^17 - 
   7.437730461258258*10^-50 x^18 + 5.6935667962417365*10^-53 x^19 + 
   4.884335797015302*10^-57 x^20)/(1 + 0.022485823680898447 x + 
   0.00024124319329781212` x^2 + 1.6217053067486031*10^-6 x^3 + 
   7.62119581798388*10^-9 x^4 + 2.6440509149841488*10^-11 x^5 + 
   6.940819378576599*10^-14 x^6 + 1.3349815939883956*10^-16 x^7 + 
   1.3297189611369127*10^-19 x^8 - 3.4531214833583004*10^-22 x^9 - 
   2.6076219410527448*10^-24 x^10 - 8.896390700596188*10^-27 x^11 - 
   1.626847058693433*10^-29 x^12 - 1.787193005902865*10^-33 x^13 + 
   5.084370385618727*10^-35 x^14 + 2.9973194551897134*10^-38 x^15 - 
   7.82697273897104*10^-42 x^16 - 3.877478033889984*10^-46 x^17 + 
   1.5319696649894568*10^-48 x^18 + 5.994084293181828*10^-51 x^19 - 
   5.89901817041302*10^-54 x^20)

For positve x, use 1-Win(-x).


Cleaner and with less precision:

(0.5                   + 1.2937833*10^-2  x    + 
 1.5873386*10^-4  x^2  + 1.2197822*10^-6  x^3  + 
 6.5608461*10^-9  x^4  + 2.6177006*10^-11 x^5  + 
 8.0200781*10^-14 x^6  + 1.9287894*10^-16 x^7  + 
 3.7019776*10^-19 x^8  + 5.7672064*10^-22 x^9  + 
 7.4761003*10^-25 x^10 + 8.0209742*10^-28 x^11 + 
 5.4920291*10^-31 x^12 - 2.5489398*10^-34 x^13 - 
 2.8990925*10^-37 x^14 + 5.9407263*10^-41 x^15 - 
 2.4091252*10^-45 x^16 - 1.5518337*10^-47 x^17 - 
 7.4377304*10^-50 x^18 + 5.6935667*10^-53 x^19 + 
 4.8843357*10^-57 x^20)/
(1                     + 2.2485823*10^-2  x    + 
 2.4124319*10^-4  x^2  + 1.6217053*10^-6  x^3  + 
 7.6211958*10^-9  x^4  + 2.6440509*10^-11 x^5  + 
 6.9408193*10^-14 x^6  + 1.3349815*10^-16 x^7  + 
 1.3297189*10^-19 x^8  - 3.4531214*10^-22 x^9  - 
 2.6076219*10^-24 x^10 - 8.8963907*10^-27 x^11 - 
 1.6268470*10^-29 x^12 - 1.7871930*10^-33 x^13 + 
 5.0843703*10^-35 x^14 + 2.9973194*10^-38 x^15 - 
 7.8269727*10^-42 x^16 - 3.8774780*10^-46 x^17 + 
 1.5319696*10^-48 x^18 + 5.9940842*10^-51 x^19 - 
 5.8990181*10^-54 x^20)

@dshawul
Copy link

dshawul commented Jun 9, 2019

What is wrong with using the logit formula, often used for converting winning percentage to centipawns ?
You get the winning percentage from the value head W+D/2, and use logit(W+D/2).
Did I miss something ?

@zz4032
Copy link
Contributor

zz4032 commented Jun 9, 2019

I get a better fit than RC4 (this PR) formula with cp-logit(Q) = LN( (Q/2+0.5) / (1-(Q/2+0.5) ) * 135
135 is best with least square fitting when minimizing (cp(SF) - cp-logit(Q))² * (1-abs(Q))² )^0.5
Remark: cp-logit(Q) is division by zero with Q=1.
Screenshot from 2019-06-09 16-09-24
Screenshot from 2019-06-09 16-09-56

@Mardak
Copy link
Contributor

Mardak commented Jun 9, 2019

Even if we don't switch to logit, using the logit's inverse function logistic #881 (comment) is maybe close enough with a maximum 0.0396 difference in win rate when using the winrate^14 formula here.

win = 1 / (1 + Math.exp(-cp / 135))

@AySz88
Copy link

AySz88 commented Jun 9, 2019

For that logit, looks like the 10-pawns zone wouldn't start until 0.9988? That seems like it'd annoy TCEC.

Not sure it has a clean fix that well preserves the reasons for using a logit in the first place. Maybe something piecewise if you want something analogous to a resignation threshold (i.e. fit the curve up to 0.975, then just tack on a line from (0.975,1000) to (1.00, 12800)).

@AlexisOlson
Copy link
Contributor Author

The logit works fine when you're fitting to the middle but has trouble fitting the edges well.

@GeorgeMJ23
Copy link

GeorgeMJ23 commented Jun 17, 2019

@AlexisOlson <<Here's one that works for -12,800 centipawns to zero with a worst-case error around 2*10^-6.

(0.5000000176535154 + 0.012937833148154361 x +
0.0001587338640140...................................etc etc>>

Hi, which program did you use for making that nice fit?

@AlexisOlson
Copy link
Contributor Author

@GeorgeMJ23 I used Mathematica, which has a nice RationalInterpolation function and played around with a bunch of different interpolation points options until I found something suitable.

@GeorgeMJ23
Copy link

Thanks, i used Mathematica also and came with something also very close to this but a bit with more error so i wanted to know if you use something else. :)

@GeorgeMJ23
Copy link

Thanks Alexis but i can't seem to find this fit with any number of different interpolation points in Mathematica :(
Oh well.....

@AlexisOlson
Copy link
Contributor Author

The interpolation is pretty unstable for this function, so I had to try a bunch of different variations before I found something that worked with that small of an error.

@GeorgeMJ23
Copy link

Note that your above win(x) formula does not give the winning probability but the expected score for a x(centiPawn value).
So if TCEC wants to use it, and since they traditionally report winning probability(assuming only 2 results are possible), they should use win_prob(x) = 2·(1-win(-x)) -1 value which is:
win_prob(cp) = (cp) =
(-3.53070308545255810^-8 + 0.0033898426154102754cp - 0.00007622453473034402*cp^2

  • 8.17859197583349810^-7cp^3 - 5.50049647868407910^-9cp^4
  • 2.591350427068169310^-11cp^5 - 9.09933684130957110^-14cp^6
  • 2.52259725826362810^-16cp^7 - 6.07423643607685810^-19cp^8
  • 1.498753444794085610^-21cp^9 - 4.10284201238235910^-24cp^10
  • 1.050058554869741210^-26cp^11 - 1.736687640998715610^-29cp^12
  • 1.277405041123677510^-33cp^13 + 5.14235223604459910^-35cp^14
  • 2.98543800250477310^-38cp^15 - 7.82215448842038710^-42cp^16
  • 3.56711129040379910^-46cp^17 + 1.680724274214621810^-48cp^18
  • 5.88021295725699310^-51cp^19 - 5.9087868420070510^-54cp^20)
    /
    (1.0 - 0.022485823680898447cp +
    0.00024124319329781212
    cp^2 - 1.621705306748603110^-6cp^3
  • 7.6211958179838810^-9cp^4 - 2.644050914984148810^-11cp^5
  • 6.94081937857659910^-14cp^6 - 1.334981593988395610^-16cp^7
  • 1.329718961136912710^-19cp^8 + 3.453121483358300410^-22cp^9
  • 2.607621941052744810^-24cp^10 + 8.89639070059618810^-27cp^11
  • 1.62684705869343310^-29cp^12 + 1.78719300590286510^-33cp^13
  • 5.08437038561872710^-35cp^14 - 2.997319455189713410^-38cp^15
  • 7.82697273897103910^-42cp^16 + 3.87747803388998410^-46cp^17
  • 1.531969664989456810^-48cp^18 - 5.99408429318182810^-51cp^19
  • 5.899018170413019*^10-54*cp^20)

@mstembera
Copy link

What about writing it as

uci_info.score = 295 * edge.GetQ(default_q) /
                          (1 - (295.0/12800.0) * std::pow(edge.GetQ(default_q), 14));

so it's self documenting?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

10 participants