Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.

Differences Between: [Versions 400 and 401]

   1  <?php
   2  
   3  namespace PhpOffice\PhpSpreadsheet\Calculation\MathTrig;
   4  
   5  use PhpOffice\PhpSpreadsheet\Calculation\ArrayEnabled;
   6  use PhpOffice\PhpSpreadsheet\Calculation\Exception;
   7  use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError;
   8  
   9  class Roman
  10  {
  11      use ArrayEnabled;
  12  
  13      private const VALUES = [
  14          45 => ['VL'],
  15          46 => ['VLI'],
  16          47 => ['VLII'],
  17          48 => ['VLIII'],
  18          49 => ['VLIV', 'IL'],
  19          95 => ['VC'],
  20          96 => ['VCI'],
  21          97 => ['VCII'],
  22          98 => ['VCIII'],
  23          99 => ['VCIV', 'IC'],
  24          145 => ['CVL'],
  25          146 => ['CVLI'],
  26          147 => ['CVLII'],
  27          148 => ['CVLIII'],
  28          149 => ['CVLIV', 'CIL'],
  29          195 => ['CVC'],
  30          196 => ['CVCI'],
  31          197 => ['CVCII'],
  32          198 => ['CVCIII'],
  33          199 => ['CVCIV', 'CIC'],
  34          245 => ['CCVL'],
  35          246 => ['CCVLI'],
  36          247 => ['CCVLII'],
  37          248 => ['CCVLIII'],
  38          249 => ['CCVLIV', 'CCIL'],
  39          295 => ['CCVC'],
  40          296 => ['CCVCI'],
  41          297 => ['CCVCII'],
  42          298 => ['CCVCIII'],
  43          299 => ['CCVCIV', 'CCIC'],
  44          345 => ['CCCVL'],
  45          346 => ['CCCVLI'],
  46          347 => ['CCCVLII'],
  47          348 => ['CCCVLIII'],
  48          349 => ['CCCVLIV', 'CCCIL'],
  49          395 => ['CCCVC'],
  50          396 => ['CCCVCI'],
  51          397 => ['CCCVCII'],
  52          398 => ['CCCVCIII'],
  53          399 => ['CCCVCIV', 'CCCIC'],
  54          445 => ['CDVL'],
  55          446 => ['CDVLI'],
  56          447 => ['CDVLII'],
  57          448 => ['CDVLIII'],
  58          449 => ['CDVLIV', 'CDIL'],
  59          450 => ['LD'],
  60          451 => ['LDI'],
  61          452 => ['LDII'],
  62          453 => ['LDIII'],
  63          454 => ['LDIV'],
  64          455 => ['LDV'],
  65          456 => ['LDVI'],
  66          457 => ['LDVII'],
  67          458 => ['LDVIII'],
  68          459 => ['LDIX'],
  69          460 => ['LDX'],
  70          461 => ['LDXI'],
  71          462 => ['LDXII'],
  72          463 => ['LDXIII'],
  73          464 => ['LDXIV'],
  74          465 => ['LDXV'],
  75          466 => ['LDXVI'],
  76          467 => ['LDXVII'],
  77          468 => ['LDXVIII'],
  78          469 => ['LDXIX'],
  79          470 => ['LDXX'],
  80          471 => ['LDXXI'],
  81          472 => ['LDXXII'],
  82          473 => ['LDXXIII'],
  83          474 => ['LDXXIV'],
  84          475 => ['LDXXV'],
  85          476 => ['LDXXVI'],
  86          477 => ['LDXXVII'],
  87          478 => ['LDXXVIII'],
  88          479 => ['LDXXIX'],
  89          480 => ['LDXXX'],
  90          481 => ['LDXXXI'],
  91          482 => ['LDXXXII'],
  92          483 => ['LDXXXIII'],
  93          484 => ['LDXXXIV'],
  94          485 => ['LDXXXV'],
  95          486 => ['LDXXXVI'],
  96          487 => ['LDXXXVII'],
  97          488 => ['LDXXXVIII'],
  98          489 => ['LDXXXIX'],
  99          490 => ['LDXL', 'XD'],
 100          491 => ['LDXLI', 'XDI'],
 101          492 => ['LDXLII', 'XDII'],
 102          493 => ['LDXLIII', 'XDIII'],
 103          494 => ['LDXLIV', 'XDIV'],
 104          495 => ['LDVL', 'XDV', 'VD'],
 105          496 => ['LDVLI', 'XDVI', 'VDI'],
 106          497 => ['LDVLII', 'XDVII', 'VDII'],
 107          498 => ['LDVLIII', 'XDVIII', 'VDIII'],
 108          499 => ['LDVLIV', 'XDIX', 'VDIV', 'ID'],
 109          545 => ['DVL'],
 110          546 => ['DVLI'],
 111          547 => ['DVLII'],
 112          548 => ['DVLIII'],
 113          549 => ['DVLIV', 'DIL'],
 114          595 => ['DVC'],
 115          596 => ['DVCI'],
 116          597 => ['DVCII'],
 117          598 => ['DVCIII'],
 118          599 => ['DVCIV', 'DIC'],
 119          645 => ['DCVL'],
 120          646 => ['DCVLI'],
 121          647 => ['DCVLII'],
 122          648 => ['DCVLIII'],
 123          649 => ['DCVLIV', 'DCIL'],
 124          695 => ['DCVC'],
 125          696 => ['DCVCI'],
 126          697 => ['DCVCII'],
 127          698 => ['DCVCIII'],
 128          699 => ['DCVCIV', 'DCIC'],
 129          745 => ['DCCVL'],
 130          746 => ['DCCVLI'],
 131          747 => ['DCCVLII'],
 132          748 => ['DCCVLIII'],
 133          749 => ['DCCVLIV', 'DCCIL'],
 134          795 => ['DCCVC'],
 135          796 => ['DCCVCI'],
 136          797 => ['DCCVCII'],
 137          798 => ['DCCVCIII'],
 138          799 => ['DCCVCIV', 'DCCIC'],
 139          845 => ['DCCCVL'],
 140          846 => ['DCCCVLI'],
 141          847 => ['DCCCVLII'],
 142          848 => ['DCCCVLIII'],
 143          849 => ['DCCCVLIV', 'DCCCIL'],
 144          895 => ['DCCCVC'],
 145          896 => ['DCCCVCI'],
 146          897 => ['DCCCVCII'],
 147          898 => ['DCCCVCIII'],
 148          899 => ['DCCCVCIV', 'DCCCIC'],
 149          945 => ['CMVL'],
 150          946 => ['CMVLI'],
 151          947 => ['CMVLII'],
 152          948 => ['CMVLIII'],
 153          949 => ['CMVLIV', 'CMIL'],
 154          950 => ['LM'],
 155          951 => ['LMI'],
 156          952 => ['LMII'],
 157          953 => ['LMIII'],
 158          954 => ['LMIV'],
 159          955 => ['LMV'],
 160          956 => ['LMVI'],
 161          957 => ['LMVII'],
 162          958 => ['LMVIII'],
 163          959 => ['LMIX'],
 164          960 => ['LMX'],
 165          961 => ['LMXI'],
 166          962 => ['LMXII'],
 167          963 => ['LMXIII'],
 168          964 => ['LMXIV'],
 169          965 => ['LMXV'],
 170          966 => ['LMXVI'],
 171          967 => ['LMXVII'],
 172          968 => ['LMXVIII'],
 173          969 => ['LMXIX'],
 174          970 => ['LMXX'],
 175          971 => ['LMXXI'],
 176          972 => ['LMXXII'],
 177          973 => ['LMXXIII'],
 178          974 => ['LMXXIV'],
 179          975 => ['LMXXV'],
 180          976 => ['LMXXVI'],
 181          977 => ['LMXXVII'],
 182          978 => ['LMXXVIII'],
 183          979 => ['LMXXIX'],
 184          980 => ['LMXXX'],
 185          981 => ['LMXXXI'],
 186          982 => ['LMXXXII'],
 187          983 => ['LMXXXIII'],
 188          984 => ['LMXXXIV'],
 189          985 => ['LMXXXV'],
 190          986 => ['LMXXXVI'],
 191          987 => ['LMXXXVII'],
 192          988 => ['LMXXXVIII'],
 193          989 => ['LMXXXIX'],
 194          990 => ['LMXL', 'XM'],
 195          991 => ['LMXLI', 'XMI'],
 196          992 => ['LMXLII', 'XMII'],
 197          993 => ['LMXLIII', 'XMIII'],
 198          994 => ['LMXLIV', 'XMIV'],
 199          995 => ['LMVL', 'XMV', 'VM'],
 200          996 => ['LMVLI', 'XMVI', 'VMI'],
 201          997 => ['LMVLII', 'XMVII', 'VMII'],
 202          998 => ['LMVLIII', 'XMVIII', 'VMIII'],
 203          999 => ['LMVLIV', 'XMIX', 'VMIV', 'IM'],
 204          1045 => ['MVL'],
 205          1046 => ['MVLI'],
 206          1047 => ['MVLII'],
 207          1048 => ['MVLIII'],
 208          1049 => ['MVLIV', 'MIL'],
 209          1095 => ['MVC'],
 210          1096 => ['MVCI'],
 211          1097 => ['MVCII'],
 212          1098 => ['MVCIII'],
 213          1099 => ['MVCIV', 'MIC'],
 214          1145 => ['MCVL'],
 215          1146 => ['MCVLI'],
 216          1147 => ['MCVLII'],
 217          1148 => ['MCVLIII'],
 218          1149 => ['MCVLIV', 'MCIL'],
 219          1195 => ['MCVC'],
 220          1196 => ['MCVCI'],
 221          1197 => ['MCVCII'],
 222          1198 => ['MCVCIII'],
 223          1199 => ['MCVCIV', 'MCIC'],
 224          1245 => ['MCCVL'],
 225          1246 => ['MCCVLI'],
 226          1247 => ['MCCVLII'],
 227          1248 => ['MCCVLIII'],
 228          1249 => ['MCCVLIV', 'MCCIL'],
 229          1295 => ['MCCVC'],
 230          1296 => ['MCCVCI'],
 231          1297 => ['MCCVCII'],
 232          1298 => ['MCCVCIII'],
 233          1299 => ['MCCVCIV', 'MCCIC'],
 234          1345 => ['MCCCVL'],
 235          1346 => ['MCCCVLI'],
 236          1347 => ['MCCCVLII'],
 237          1348 => ['MCCCVLIII'],
 238          1349 => ['MCCCVLIV', 'MCCCIL'],
 239          1395 => ['MCCCVC'],
 240          1396 => ['MCCCVCI'],
 241          1397 => ['MCCCVCII'],
 242          1398 => ['MCCCVCIII'],
 243          1399 => ['MCCCVCIV', 'MCCCIC'],
 244          1445 => ['MCDVL'],
 245          1446 => ['MCDVLI'],
 246          1447 => ['MCDVLII'],
 247          1448 => ['MCDVLIII'],
 248          1449 => ['MCDVLIV', 'MCDIL'],
 249          1450 => ['MLD'],
 250          1451 => ['MLDI'],
 251          1452 => ['MLDII'],
 252          1453 => ['MLDIII'],
 253          1454 => ['MLDIV'],
 254          1455 => ['MLDV'],
 255          1456 => ['MLDVI'],
 256          1457 => ['MLDVII'],
 257          1458 => ['MLDVIII'],
 258          1459 => ['MLDIX'],
 259          1460 => ['MLDX'],
 260          1461 => ['MLDXI'],
 261          1462 => ['MLDXII'],
 262          1463 => ['MLDXIII'],
 263          1464 => ['MLDXIV'],
 264          1465 => ['MLDXV'],
 265          1466 => ['MLDXVI'],
 266          1467 => ['MLDXVII'],
 267          1468 => ['MLDXVIII'],
 268          1469 => ['MLDXIX'],
 269          1470 => ['MLDXX'],
 270          1471 => ['MLDXXI'],
 271          1472 => ['MLDXXII'],
 272          1473 => ['MLDXXIII'],
 273          1474 => ['MLDXXIV'],
 274          1475 => ['MLDXXV'],
 275          1476 => ['MLDXXVI'],
 276          1477 => ['MLDXXVII'],
 277          1478 => ['MLDXXVIII'],
 278          1479 => ['MLDXXIX'],
 279          1480 => ['MLDXXX'],
 280          1481 => ['MLDXXXI'],
 281          1482 => ['MLDXXXII'],
 282          1483 => ['MLDXXXIII'],
 283          1484 => ['MLDXXXIV'],
 284          1485 => ['MLDXXXV'],
 285          1486 => ['MLDXXXVI'],
 286          1487 => ['MLDXXXVII'],
 287          1488 => ['MLDXXXVIII'],
 288          1489 => ['MLDXXXIX'],
 289          1490 => ['MLDXL', 'MXD'],
 290          1491 => ['MLDXLI', 'MXDI'],
 291          1492 => ['MLDXLII', 'MXDII'],
 292          1493 => ['MLDXLIII', 'MXDIII'],
 293          1494 => ['MLDXLIV', 'MXDIV'],
 294          1495 => ['MLDVL', 'MXDV', 'MVD'],
 295          1496 => ['MLDVLI', 'MXDVI', 'MVDI'],
 296          1497 => ['MLDVLII', 'MXDVII', 'MVDII'],
 297          1498 => ['MLDVLIII', 'MXDVIII', 'MVDIII'],
 298          1499 => ['MLDVLIV', 'MXDIX', 'MVDIV', 'MID'],
 299          1545 => ['MDVL'],
 300          1546 => ['MDVLI'],
 301          1547 => ['MDVLII'],
 302          1548 => ['MDVLIII'],
 303          1549 => ['MDVLIV', 'MDIL'],
 304          1595 => ['MDVC'],
 305          1596 => ['MDVCI'],
 306          1597 => ['MDVCII'],
 307          1598 => ['MDVCIII'],
 308          1599 => ['MDVCIV', 'MDIC'],
 309          1645 => ['MDCVL'],
 310          1646 => ['MDCVLI'],
 311          1647 => ['MDCVLII'],
 312          1648 => ['MDCVLIII'],
 313          1649 => ['MDCVLIV', 'MDCIL'],
 314          1695 => ['MDCVC'],
 315          1696 => ['MDCVCI'],
 316          1697 => ['MDCVCII'],
 317          1698 => ['MDCVCIII'],
 318          1699 => ['MDCVCIV', 'MDCIC'],
 319          1745 => ['MDCCVL'],
 320          1746 => ['MDCCVLI'],
 321          1747 => ['MDCCVLII'],
 322          1748 => ['MDCCVLIII'],
 323          1749 => ['MDCCVLIV', 'MDCCIL'],
 324          1795 => ['MDCCVC'],
 325          1796 => ['MDCCVCI'],
 326          1797 => ['MDCCVCII'],
 327          1798 => ['MDCCVCIII'],
 328          1799 => ['MDCCVCIV', 'MDCCIC'],
 329          1845 => ['MDCCCVL'],
 330          1846 => ['MDCCCVLI'],
 331          1847 => ['MDCCCVLII'],
 332          1848 => ['MDCCCVLIII'],
 333          1849 => ['MDCCCVLIV', 'MDCCCIL'],
 334          1895 => ['MDCCCVC'],
 335          1896 => ['MDCCCVCI'],
 336          1897 => ['MDCCCVCII'],
 337          1898 => ['MDCCCVCIII'],
 338          1899 => ['MDCCCVCIV', 'MDCCCIC'],
 339          1945 => ['MCMVL'],
 340          1946 => ['MCMVLI'],
 341          1947 => ['MCMVLII'],
 342          1948 => ['MCMVLIII'],
 343          1949 => ['MCMVLIV', 'MCMIL'],
 344          1950 => ['MLM'],
 345          1951 => ['MLMI'],
 346          1952 => ['MLMII'],
 347          1953 => ['MLMIII'],
 348          1954 => ['MLMIV'],
 349          1955 => ['MLMV'],
 350          1956 => ['MLMVI'],
 351          1957 => ['MLMVII'],
 352          1958 => ['MLMVIII'],
 353          1959 => ['MLMIX'],
 354          1960 => ['MLMX'],
 355          1961 => ['MLMXI'],
 356          1962 => ['MLMXII'],
 357          1963 => ['MLMXIII'],
 358          1964 => ['MLMXIV'],
 359          1965 => ['MLMXV'],
 360          1966 => ['MLMXVI'],
 361          1967 => ['MLMXVII'],
 362          1968 => ['MLMXVIII'],
 363          1969 => ['MLMXIX'],
 364          1970 => ['MLMXX'],
 365          1971 => ['MLMXXI'],
 366          1972 => ['MLMXXII'],
 367          1973 => ['MLMXXIII'],
 368          1974 => ['MLMXXIV'],
 369          1975 => ['MLMXXV'],
 370          1976 => ['MLMXXVI'],
 371          1977 => ['MLMXXVII'],
 372          1978 => ['MLMXXVIII'],
 373          1979 => ['MLMXXIX'],
 374          1980 => ['MLMXXX'],
 375          1981 => ['MLMXXXI'],
 376          1982 => ['MLMXXXII'],
 377          1983 => ['MLMXXXIII'],
 378          1984 => ['MLMXXXIV'],
 379          1985 => ['MLMXXXV'],
 380          1986 => ['MLMXXXVI'],
 381          1987 => ['MLMXXXVII'],
 382          1988 => ['MLMXXXVIII'],
 383          1989 => ['MLMXXXIX'],
 384          1990 => ['MLMXL', 'MXM'],
 385          1991 => ['MLMXLI', 'MXMI'],
 386          1992 => ['MLMXLII', 'MXMII'],
 387          1993 => ['MLMXLIII', 'MXMIII'],
 388          1994 => ['MLMXLIV', 'MXMIV'],
 389          1995 => ['MLMVL', 'MXMV', 'MVM'],
 390          1996 => ['MLMVLI', 'MXMVI', 'MVMI'],
 391          1997 => ['MLMVLII', 'MXMVII', 'MVMII'],
 392          1998 => ['MLMVLIII', 'MXMVIII', 'MVMIII'],
 393          1999 => ['MLMVLIV', 'MXMIX', 'MVMIV', 'MIM'],
 394          2045 => ['MMVL'],
 395          2046 => ['MMVLI'],
 396          2047 => ['MMVLII'],
 397          2048 => ['MMVLIII'],
 398          2049 => ['MMVLIV', 'MMIL'],
 399          2095 => ['MMVC'],
 400          2096 => ['MMVCI'],
 401          2097 => ['MMVCII'],
 402          2098 => ['MMVCIII'],
 403          2099 => ['MMVCIV', 'MMIC'],
 404          2145 => ['MMCVL'],
 405          2146 => ['MMCVLI'],
 406          2147 => ['MMCVLII'],
 407          2148 => ['MMCVLIII'],
 408          2149 => ['MMCVLIV', 'MMCIL'],
 409          2195 => ['MMCVC'],
 410          2196 => ['MMCVCI'],
 411          2197 => ['MMCVCII'],
 412          2198 => ['MMCVCIII'],
 413          2199 => ['MMCVCIV', 'MMCIC'],
 414          2245 => ['MMCCVL'],
 415          2246 => ['MMCCVLI'],
 416          2247 => ['MMCCVLII'],
 417          2248 => ['MMCCVLIII'],
 418          2249 => ['MMCCVLIV', 'MMCCIL'],
 419          2295 => ['MMCCVC'],
 420          2296 => ['MMCCVCI'],
 421          2297 => ['MMCCVCII'],
 422          2298 => ['MMCCVCIII'],
 423          2299 => ['MMCCVCIV', 'MMCCIC'],
 424          2345 => ['MMCCCVL'],
 425          2346 => ['MMCCCVLI'],
 426          2347 => ['MMCCCVLII'],
 427          2348 => ['MMCCCVLIII'],
 428          2349 => ['MMCCCVLIV', 'MMCCCIL'],
 429          2395 => ['MMCCCVC'],
 430          2396 => ['MMCCCVCI'],
 431          2397 => ['MMCCCVCII'],
 432          2398 => ['MMCCCVCIII'],
 433          2399 => ['MMCCCVCIV', 'MMCCCIC'],
 434          2445 => ['MMCDVL'],
 435          2446 => ['MMCDVLI'],
 436          2447 => ['MMCDVLII'],
 437          2448 => ['MMCDVLIII'],
 438          2449 => ['MMCDVLIV', 'MMCDIL'],
 439          2450 => ['MMLD'],
 440          2451 => ['MMLDI'],
 441          2452 => ['MMLDII'],
 442          2453 => ['MMLDIII'],
 443          2454 => ['MMLDIV'],
 444          2455 => ['MMLDV'],
 445          2456 => ['MMLDVI'],
 446          2457 => ['MMLDVII'],
 447          2458 => ['MMLDVIII'],
 448          2459 => ['MMLDIX'],
 449          2460 => ['MMLDX'],
 450          2461 => ['MMLDXI'],
 451          2462 => ['MMLDXII'],
 452          2463 => ['MMLDXIII'],
 453          2464 => ['MMLDXIV'],
 454          2465 => ['MMLDXV'],
 455          2466 => ['MMLDXVI'],
 456          2467 => ['MMLDXVII'],
 457          2468 => ['MMLDXVIII'],
 458          2469 => ['MMLDXIX'],
 459          2470 => ['MMLDXX'],
 460          2471 => ['MMLDXXI'],
 461          2472 => ['MMLDXXII'],
 462          2473 => ['MMLDXXIII'],
 463          2474 => ['MMLDXXIV'],
 464          2475 => ['MMLDXXV'],
 465          2476 => ['MMLDXXVI'],
 466          2477 => ['MMLDXXVII'],
 467          2478 => ['MMLDXXVIII'],
 468          2479 => ['MMLDXXIX'],
 469          2480 => ['MMLDXXX'],
 470          2481 => ['MMLDXXXI'],
 471          2482 => ['MMLDXXXII'],
 472          2483 => ['MMLDXXXIII'],
 473          2484 => ['MMLDXXXIV'],
 474          2485 => ['MMLDXXXV'],
 475          2486 => ['MMLDXXXVI'],
 476          2487 => ['MMLDXXXVII'],
 477          2488 => ['MMLDXXXVIII'],
 478          2489 => ['MMLDXXXIX'],
 479          2490 => ['MMLDXL', 'MMXD'],
 480          2491 => ['MMLDXLI', 'MMXDI'],
 481          2492 => ['MMLDXLII', 'MMXDII'],
 482          2493 => ['MMLDXLIII', 'MMXDIII'],
 483          2494 => ['MMLDXLIV', 'MMXDIV'],
 484          2495 => ['MMLDVL', 'MMXDV', 'MMVD'],
 485          2496 => ['MMLDVLI', 'MMXDVI', 'MMVDI'],
 486          2497 => ['MMLDVLII', 'MMXDVII', 'MMVDII'],
 487          2498 => ['MMLDVLIII', 'MMXDVIII', 'MMVDIII'],
 488          2499 => ['MMLDVLIV', 'MMXDIX', 'MMVDIV', 'MMID'],
 489          2545 => ['MMDVL'],
 490          2546 => ['MMDVLI'],
 491          2547 => ['MMDVLII'],
 492          2548 => ['MMDVLIII'],
 493          2549 => ['MMDVLIV', 'MMDIL'],
 494          2595 => ['MMDVC'],
 495          2596 => ['MMDVCI'],
 496          2597 => ['MMDVCII'],
 497          2598 => ['MMDVCIII'],
 498          2599 => ['MMDVCIV', 'MMDIC'],
 499          2645 => ['MMDCVL'],
 500          2646 => ['MMDCVLI'],
 501          2647 => ['MMDCVLII'],
 502          2648 => ['MMDCVLIII'],
 503          2649 => ['MMDCVLIV', 'MMDCIL'],
 504          2695 => ['MMDCVC'],
 505          2696 => ['MMDCVCI'],
 506          2697 => ['MMDCVCII'],
 507          2698 => ['MMDCVCIII'],
 508          2699 => ['MMDCVCIV', 'MMDCIC'],
 509          2745 => ['MMDCCVL'],
 510          2746 => ['MMDCCVLI'],
 511          2747 => ['MMDCCVLII'],
 512          2748 => ['MMDCCVLIII'],
 513          2749 => ['MMDCCVLIV', 'MMDCCIL'],
 514          2795 => ['MMDCCVC'],
 515          2796 => ['MMDCCVCI'],
 516          2797 => ['MMDCCVCII'],
 517          2798 => ['MMDCCVCIII'],
 518          2799 => ['MMDCCVCIV', 'MMDCCIC'],
 519          2845 => ['MMDCCCVL'],
 520          2846 => ['MMDCCCVLI'],
 521          2847 => ['MMDCCCVLII'],
 522          2848 => ['MMDCCCVLIII'],
 523          2849 => ['MMDCCCVLIV', 'MMDCCCIL'],
 524          2895 => ['MMDCCCVC'],
 525          2896 => ['MMDCCCVCI'],
 526          2897 => ['MMDCCCVCII'],
 527          2898 => ['MMDCCCVCIII'],
 528          2899 => ['MMDCCCVCIV', 'MMDCCCIC'],
 529          2945 => ['MMCMVL'],
 530          2946 => ['MMCMVLI'],
 531          2947 => ['MMCMVLII'],
 532          2948 => ['MMCMVLIII'],
 533          2949 => ['MMCMVLIV', 'MMCMIL'],
 534          2950 => ['MMLM'],
 535          2951 => ['MMLMI'],
 536          2952 => ['MMLMII'],
 537          2953 => ['MMLMIII'],
 538          2954 => ['MMLMIV'],
 539          2955 => ['MMLMV'],
 540          2956 => ['MMLMVI'],
 541          2957 => ['MMLMVII'],
 542          2958 => ['MMLMVIII'],
 543          2959 => ['MMLMIX'],
 544          2960 => ['MMLMX'],
 545          2961 => ['MMLMXI'],
 546          2962 => ['MMLMXII'],
 547          2963 => ['MMLMXIII'],
 548          2964 => ['MMLMXIV'],
 549          2965 => ['MMLMXV'],
 550          2966 => ['MMLMXVI'],
 551          2967 => ['MMLMXVII'],
 552          2968 => ['MMLMXVIII'],
 553          2969 => ['MMLMXIX'],
 554          2970 => ['MMLMXX'],
 555          2971 => ['MMLMXXI'],
 556          2972 => ['MMLMXXII'],
 557          2973 => ['MMLMXXIII'],
 558          2974 => ['MMLMXXIV'],
 559          2975 => ['MMLMXXV'],
 560          2976 => ['MMLMXXVI'],
 561          2977 => ['MMLMXXVII'],
 562          2978 => ['MMLMXXVIII'],
 563          2979 => ['MMLMXXIX'],
 564          2980 => ['MMLMXXX'],
 565          2981 => ['MMLMXXXI'],
 566          2982 => ['MMLMXXXII'],
 567          2983 => ['MMLMXXXIII'],
 568          2984 => ['MMLMXXXIV'],
 569          2985 => ['MMLMXXXV'],
 570          2986 => ['MMLMXXXVI'],
 571          2987 => ['MMLMXXXVII'],
 572          2988 => ['MMLMXXXVIII'],
 573          2989 => ['MMLMXXXIX'],
 574          2990 => ['MMLMXL', 'MMXM'],
 575          2991 => ['MMLMXLI', 'MMXMI'],
 576          2992 => ['MMLMXLII', 'MMXMII'],
 577          2993 => ['MMLMXLIII', 'MMXMIII'],
 578          2994 => ['MMLMXLIV', 'MMXMIV'],
 579          2995 => ['MMLMVL', 'MMXMV', 'MMVM'],
 580          2996 => ['MMLMVLI', 'MMXMVI', 'MMVMI'],
 581          2997 => ['MMLMVLII', 'MMXMVII', 'MMVMII'],
 582          2998 => ['MMLMVLIII', 'MMXMVIII', 'MMVMIII'],
 583          2999 => ['MMLMVLIV', 'MMXMIX', 'MMVMIV', 'MMIM'],
 584          3045 => ['MMMVL'],
 585          3046 => ['MMMVLI'],
 586          3047 => ['MMMVLII'],
 587          3048 => ['MMMVLIII'],
 588          3049 => ['MMMVLIV', 'MMMIL'],
 589          3095 => ['MMMVC'],
 590          3096 => ['MMMVCI'],
 591          3097 => ['MMMVCII'],
 592          3098 => ['MMMVCIII'],
 593          3099 => ['MMMVCIV', 'MMMIC'],
 594          3145 => ['MMMCVL'],
 595          3146 => ['MMMCVLI'],
 596          3147 => ['MMMCVLII'],
 597          3148 => ['MMMCVLIII'],
 598          3149 => ['MMMCVLIV', 'MMMCIL'],
 599          3195 => ['MMMCVC'],
 600          3196 => ['MMMCVCI'],
 601          3197 => ['MMMCVCII'],
 602          3198 => ['MMMCVCIII'],
 603          3199 => ['MMMCVCIV', 'MMMCIC'],
 604          3245 => ['MMMCCVL'],
 605          3246 => ['MMMCCVLI'],
 606          3247 => ['MMMCCVLII'],
 607          3248 => ['MMMCCVLIII'],
 608          3249 => ['MMMCCVLIV', 'MMMCCIL'],
 609          3295 => ['MMMCCVC'],
 610          3296 => ['MMMCCVCI'],
 611          3297 => ['MMMCCVCII'],
 612          3298 => ['MMMCCVCIII'],
 613          3299 => ['MMMCCVCIV', 'MMMCCIC'],
 614          3345 => ['MMMCCCVL'],
 615          3346 => ['MMMCCCVLI'],
 616          3347 => ['MMMCCCVLII'],
 617          3348 => ['MMMCCCVLIII'],
 618          3349 => ['MMMCCCVLIV', 'MMMCCCIL'],
 619          3395 => ['MMMCCCVC'],
 620          3396 => ['MMMCCCVCI'],
 621          3397 => ['MMMCCCVCII'],
 622          3398 => ['MMMCCCVCIII'],
 623          3399 => ['MMMCCCVCIV', 'MMMCCCIC'],
 624          3445 => ['MMMCDVL'],
 625          3446 => ['MMMCDVLI'],
 626          3447 => ['MMMCDVLII'],
 627          3448 => ['MMMCDVLIII'],
 628          3449 => ['MMMCDVLIV', 'MMMCDIL'],
 629          3450 => ['MMMLD'],
 630          3451 => ['MMMLDI'],
 631          3452 => ['MMMLDII'],
 632          3453 => ['MMMLDIII'],
 633          3454 => ['MMMLDIV'],
 634          3455 => ['MMMLDV'],
 635          3456 => ['MMMLDVI'],
 636          3457 => ['MMMLDVII'],
 637          3458 => ['MMMLDVIII'],
 638          3459 => ['MMMLDIX'],
 639          3460 => ['MMMLDX'],
 640          3461 => ['MMMLDXI'],
 641          3462 => ['MMMLDXII'],
 642          3463 => ['MMMLDXIII'],
 643          3464 => ['MMMLDXIV'],
 644          3465 => ['MMMLDXV'],
 645          3466 => ['MMMLDXVI'],
 646          3467 => ['MMMLDXVII'],
 647          3468 => ['MMMLDXVIII'],
 648          3469 => ['MMMLDXIX'],
 649          3470 => ['MMMLDXX'],
 650          3471 => ['MMMLDXXI'],
 651          3472 => ['MMMLDXXII'],
 652          3473 => ['MMMLDXXIII'],
 653          3474 => ['MMMLDXXIV'],
 654          3475 => ['MMMLDXXV'],
 655          3476 => ['MMMLDXXVI'],
 656          3477 => ['MMMLDXXVII'],
 657          3478 => ['MMMLDXXVIII'],
 658          3479 => ['MMMLDXXIX'],
 659          3480 => ['MMMLDXXX'],
 660          3481 => ['MMMLDXXXI'],
 661          3482 => ['MMMLDXXXII'],
 662          3483 => ['MMMLDXXXIII'],
 663          3484 => ['MMMLDXXXIV'],
 664          3485 => ['MMMLDXXXV'],
 665          3486 => ['MMMLDXXXVI'],
 666          3487 => ['MMMLDXXXVII'],
 667          3488 => ['MMMLDXXXVIII'],
 668          3489 => ['MMMLDXXXIX'],
 669          3490 => ['MMMLDXL', 'MMMXD'],
 670          3491 => ['MMMLDXLI', 'MMMXDI'],
 671          3492 => ['MMMLDXLII', 'MMMXDII'],
 672          3493 => ['MMMLDXLIII', 'MMMXDIII'],
 673          3494 => ['MMMLDXLIV', 'MMMXDIV'],
 674          3495 => ['MMMLDVL', 'MMMXDV', 'MMMVD'],
 675          3496 => ['MMMLDVLI', 'MMMXDVI', 'MMMVDI'],
 676          3497 => ['MMMLDVLII', 'MMMXDVII', 'MMMVDII'],
 677          3498 => ['MMMLDVLIII', 'MMMXDVIII', 'MMMVDIII'],
 678          3499 => ['MMMLDVLIV', 'MMMXDIX', 'MMMVDIV', 'MMMID'],
 679          3545 => ['MMMDVL'],
 680          3546 => ['MMMDVLI'],
 681          3547 => ['MMMDVLII'],
 682          3548 => ['MMMDVLIII'],
 683          3549 => ['MMMDVLIV', 'MMMDIL'],
 684          3595 => ['MMMDVC'],
 685          3596 => ['MMMDVCI'],
 686          3597 => ['MMMDVCII'],
 687          3598 => ['MMMDVCIII'],
 688          3599 => ['MMMDVCIV', 'MMMDIC'],
 689          3645 => ['MMMDCVL'],
 690          3646 => ['MMMDCVLI'],
 691          3647 => ['MMMDCVLII'],
 692          3648 => ['MMMDCVLIII'],
 693          3649 => ['MMMDCVLIV', 'MMMDCIL'],
 694          3695 => ['MMMDCVC'],
 695          3696 => ['MMMDCVCI'],
 696          3697 => ['MMMDCVCII'],
 697          3698 => ['MMMDCVCIII'],
 698          3699 => ['MMMDCVCIV', 'MMMDCIC'],
 699          3745 => ['MMMDCCVL'],
 700          3746 => ['MMMDCCVLI'],
 701          3747 => ['MMMDCCVLII'],
 702          3748 => ['MMMDCCVLIII'],
 703          3749 => ['MMMDCCVLIV', 'MMMDCCIL'],
 704          3795 => ['MMMDCCVC'],
 705          3796 => ['MMMDCCVCI'],
 706          3797 => ['MMMDCCVCII'],
 707          3798 => ['MMMDCCVCIII'],
 708          3799 => ['MMMDCCVCIV', 'MMMDCCIC'],
 709          3845 => ['MMMDCCCVL'],
 710          3846 => ['MMMDCCCVLI'],
 711          3847 => ['MMMDCCCVLII'],
 712          3848 => ['MMMDCCCVLIII'],
 713          3849 => ['MMMDCCCVLIV', 'MMMDCCCIL'],
 714          3895 => ['MMMDCCCVC'],
 715          3896 => ['MMMDCCCVCI'],
 716          3897 => ['MMMDCCCVCII'],
 717          3898 => ['MMMDCCCVCIII'],
 718          3899 => ['MMMDCCCVCIV', 'MMMDCCCIC'],
 719          3945 => ['MMMCMVL'],
 720          3946 => ['MMMCMVLI'],
 721          3947 => ['MMMCMVLII'],
 722          3948 => ['MMMCMVLIII'],
 723          3949 => ['MMMCMVLIV', 'MMMCMIL'],
 724          3950 => ['MMMLM'],
 725          3951 => ['MMMLMI'],
 726          3952 => ['MMMLMII'],
 727          3953 => ['MMMLMIII'],
 728          3954 => ['MMMLMIV'],
 729          3955 => ['MMMLMV'],
 730          3956 => ['MMMLMVI'],
 731          3957 => ['MMMLMVII'],
 732          3958 => ['MMMLMVIII'],
 733          3959 => ['MMMLMIX'],
 734          3960 => ['MMMLMX'],
 735          3961 => ['MMMLMXI'],
 736          3962 => ['MMMLMXII'],
 737          3963 => ['MMMLMXIII'],
 738          3964 => ['MMMLMXIV'],
 739          3965 => ['MMMLMXV'],
 740          3966 => ['MMMLMXVI'],
 741          3967 => ['MMMLMXVII'],
 742          3968 => ['MMMLMXVIII'],
 743          3969 => ['MMMLMXIX'],
 744          3970 => ['MMMLMXX'],
 745          3971 => ['MMMLMXXI'],
 746          3972 => ['MMMLMXXII'],
 747          3973 => ['MMMLMXXIII'],
 748          3974 => ['MMMLMXXIV'],
 749          3975 => ['MMMLMXXV'],
 750          3976 => ['MMMLMXXVI'],
 751          3977 => ['MMMLMXXVII'],
 752          3978 => ['MMMLMXXVIII'],
 753          3979 => ['MMMLMXXIX'],
 754          3980 => ['MMMLMXXX'],
 755          3981 => ['MMMLMXXXI'],
 756          3982 => ['MMMLMXXXII'],
 757          3983 => ['MMMLMXXXIII'],
 758          3984 => ['MMMLMXXXIV'],
 759          3985 => ['MMMLMXXXV'],
 760          3986 => ['MMMLMXXXVI'],
 761          3987 => ['MMMLMXXXVII'],
 762          3988 => ['MMMLMXXXVIII'],
 763          3989 => ['MMMLMXXXIX'],
 764          3990 => ['MMMLMXL', 'MMMXM'],
 765          3991 => ['MMMLMXLI', 'MMMXMI'],
 766          3992 => ['MMMLMXLII', 'MMMXMII'],
 767          3993 => ['MMMLMXLIII', 'MMMXMIII'],
 768          3994 => ['MMMLMXLIV', 'MMMXMIV'],
 769          3995 => ['MMMLMVL', 'MMMXMV', 'MMMVM'],
 770          3996 => ['MMMLMVLI', 'MMMXMVI', 'MMMVMI'],
 771          3997 => ['MMMLMVLII', 'MMMXMVII', 'MMMVMII'],
 772          3998 => ['MMMLMVLIII', 'MMMXMVIII', 'MMMVMIII'],
 773          3999 => ['MMMLMVLIV', 'MMMXMIX', 'MMMVMIV', 'MMMIM'],
 774      ];
 775  
 776      private const THOUSANDS = ['', 'M', 'MM', 'MMM'];
 777      private const HUNDREDS = ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'];
 778      private const TENS = ['', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'];
 779      private const ONES = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'];
 780      const MAX_ROMAN_VALUE = 3999;
 781      const MAX_ROMAN_STYLE = 4;
 782  
 783      private static function valueOk(int $aValue, int $style): string
 784      {
 785          $origValue = $aValue;
 786          $m = \intdiv($aValue, 1000);
 787          $aValue %= 1000;
 788          $c = \intdiv($aValue, 100);
 789          $aValue %= 100;
 790          $t = \intdiv($aValue, 10);
 791          $aValue %= 10;
 792          $result = self::THOUSANDS[$m] . self::HUNDREDS[$c] . self::TENS[$t] . self::ONES[$aValue];
 793          if ($style > 0) {
 794              if (array_key_exists($origValue, self::VALUES)) {
 795                  $arr = self::VALUES[$origValue];
 796                  $idx = min($style, count($arr)) - 1;
 797                  $result = $arr[$idx];
 798              }
 799          }
 800  
 801          return $result;
 802      }
 803  
 804      private static function styleOk(int $aValue, int $style): string
 805      {
 806          return ($aValue < 0 || $aValue > self::MAX_ROMAN_VALUE) ? ExcelError::VALUE() : self::valueOk($aValue, $style);
 807      }
 808  
 809      public static function calculateRoman(int $aValue, int $style): string
 810      {
 811          return ($style < 0 || $style > self::MAX_ROMAN_STYLE) ? ExcelError::VALUE() : self::styleOk($aValue, $style);
 812      }
 813  
 814      /**
 815       * ROMAN.
 816       *
 817       * Converts a number to Roman numeral
 818       *
 819       * @param mixed $aValue Number to convert
 820       *                      Or can be an array of numbers
 821       * @param mixed $style Number indicating one of five possible forms
 822       *                      Or can be an array of styles
 823       *
 824       * @return array|string Roman numeral, or a string containing an error
 825       *         If an array of numbers is passed as an argument, then the returned result will also be an array
 826       *            with the same dimensions
 827       */
 828      public static function evaluate($aValue, $style = 0)
 829      {
 830          if (is_array($aValue) || is_array($style)) {
 831              return self::evaluateArrayArguments([self::class, __FUNCTION__], $aValue, $style);
 832          }
 833  
 834          try {
 835              $aValue = Helpers::validateNumericNullBool($aValue);
 836              if (is_bool($style)) {
 837                  $style = $style ? 0 : 4;
 838              }
 839              $style = Helpers::validateNumericNullSubstitution($style, null);
 840          } catch (Exception $e) {
 841              return $e->getMessage();
 842          }
 843  
 844          return self::calculateRoman((int) $aValue, (int) $style);
 845      }
 846  }