{
  "category": "Math and trigonometry functions",
  "display_name": "ROUNDUP",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.ROUNDUP",
  "implementation_state": {
    "answer_bank": {
      "excel_builds": [
        "20430"
      ],
      "larger_numeric": 236,
      "last_bit": 327,
      "matched": 52278,
      "other_mismatch": 0,
      "refused": 0,
      "rows": 52841,
      "unread": 0,
      "worst_ulp": 86
    },
    "detail": "Of 52,985 recorded answers (52,841 in the answer bank and 144 workbook cells), 563 do not match: 236 differ by more than 16 ULP, 327 differ by at most 16 ULP.",
    "dnacalc_commit": "9e1884369a678158dd82d3d74188daf986995e87",
    "in_catalogue": true,
    "state": "differs",
    "state_label": "Known larger differences",
    "summary": "Known larger differences on 563 of 52,985 recorded answers",
    "workbook_corpus": {
      "cells": 144,
      "matched": 144
    }
  },
  "implementations": [
    {
      "commit": "9e1884369a678158dd82d3d74188daf986995e87",
      "flavour": "excel-compatibility-candidate",
      "language": "Rust",
      "name": "CalcFunc",
      "own_code": [
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/rounding.rs#L109-L109",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/rounding.rs#L255-L263"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [
        "catalogue/rounding::call",
        "catalogue/rounding::numeric",
        "catalogue/rounding::numbers",
        "catalogue/rounding::abs",
        "catalogue/rounding::reading",
        "catalogue/rounding::flush",
        "catalogue/rounding::whole_reading",
        "catalogue/rounding::stored",
        "catalogue/rounding::directed_places",
        "catalogue/rounding::directed",
        "catalogue/rounding::directed_initial_underflow",
        "decimal::low32",
        "decimal::Natural::zero",
        "decimal::Natural::from_u64",
        "decimal::Natural::pow10",
        "decimal::Natural::normalize",
        "decimal::Natural::is_zero",
        "decimal::Natural::mul_add_small",
        "decimal::Natural::add_one",
        "decimal::Natural::times_pow10",
        "decimal::Natural::times_pow5",
        "decimal::Natural::times_pow2",
        "decimal::Natural::add",
        "decimal::Natural::subtract",
        "decimal::Natural::bit_len",
        "decimal::Natural::bit",
        "decimal::Natural::pow2",
        "decimal::Natural::from_u128",
        "decimal::Natural::to_u128",
        "decimal::Natural::shift_in",
        "decimal::Natural::div_rem",
        "decimal::Natural::div_small",
        "decimal::Natural::digits",
        "decimal::Natural::cmp",
        "decimal::ExactDecimal::read",
        "decimal::ExactDecimal::fifteen",
        "decimal::ExactDecimal::unit",
        "decimal::ExactDecimal::magnitude",
        "decimal::ExactDecimal::fifteen_x87",
        "decimal::ExactDecimal::normalized",
        "decimal::ExactDecimal::binary",
        "decimal::ExactDecimal::round_at",
        "decimal::round_to_64_bits",
        "decimal::truncate"
      ],
      "source": "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/rounding.rs#L109-L109",
      "state": "differs",
      "suite": null,
      "summary": "Known larger differences on 563 of 52,985 recorded answers"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.ROUNDUP.json",
  "name": "ROUNDUP",
  "notes": [
    {
      "basis": "Under the family rules the recorded rows match ROUND 36,821 of 36,945, ROUNDUP 52,022 of 52,841, ROUNDDOWN 59,182 of 59,995 and TRUNC 50,504 of 51,317, with no row lost and each remaining failure classified in the write-up.",
      "documentation": null,
      "evidence": [
        {
          "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
          "locator": null,
          "note": "the rules in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/catalogue/rounding.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: full-bank result, the rules, what stays open",
          "path": "content/notes/evidence/2026-11-04/rounding-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        }
      ],
      "functions": [
        "FUNC.ROUND",
        "FUNC.ROUNDDOWN",
        "FUNC.ROUNDUP",
        "FUNC.TRUNC"
      ],
      "inferred": null,
      "kind": "excel-differs-from-math",
      "note_id": "FN-ROUND-002",
      "open": [
        "How the scale is formed for |n| > 27: a single correctly rounded 64-bit power and the chained multiplications tried do not fit; 123 ROUND, 548 ROUNDUP, 556 ROUNDDOWN and 555 TRUNC rows remain.",
        "The reading step itself: one control at n = -10 misses the single RN64 step by just over half a unit, so that step is an approximation of the real one even for |n| <= 27. It stays because it gains rows and loses none."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "ROUND(-1594628480062905, 14)",
          "correct": {
            "bits": "0xc316a939806956e4",
            "display": "-1594628480062905",
            "how": "An integer rounded to 14 places is itself.",
            "kind": "number"
          },
          "excel": {
            "bits": "0xc316a939806956d0",
            "display": "-1594628480062900",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0xc316a939806956e4",
                "display": "-1594628480062905",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x402c000000000000",
                "display": "14",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 3758, key ROUND|0xc316a939806956e4|0x402c000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/ROUND.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ROUNDDOWN(283025097725723.5, 0)",
          "correct": {
            "bits": "0x42f0168ea69971b0",
            "display": "283025097725723",
            "how": "ROUNDDOWN drops the fraction .5.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x42f0168ea69971c0",
            "display": "283025097725724",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x42f0168ea69971b8",
                "display": "283025097725723.5",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 753, key ROUNDDOWN|0x42f0168ea69971b8|0x0000000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/ROUNDDOWN.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "Before choosing a digit these functions read the number to 15 significant digits on the x87 unit: with e the decimal exponent and n = 14 - e, y = RN64(|x| * 10^n), or RN64(|x| / 10^-n) when n is negative, while 10^|n| is exact in 64 bits (|n| <= 27). A half in y goes up for ROUNDDOWN, ROUNDUP and TRUNC and down for ROUND. So digits beyond the 15th are lost even when the requested precision keeps them: ROUND(-1594628480062905,14) loses its last digit, and ROUNDDOWN(283025097725723.5,0) returns 283025097725724, larger than its input.",
      "status": "measured",
      "title": "The rounding functions read 15 digits first, so ROUNDDOWN can round up"
    },
    {
      "basis": "One Excel workbook read cell by cell through Value2 on 2026-11-04, saved, reopened and recalculated; rows from the rounding write-up, 627 of 627.",
      "documentation": null,
      "evidence": [
        {
          "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
          "locator": null,
          "note": "the rules in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/catalogue/rounding.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": "cells A1..A4, B1..B24, reopened, recalculated",
          "note": "cell-by-cell Excel reading of the NaN patterns",
          "path": "content/notes/evidence/2026-11-04/round-nan-downstream.json",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "the script that took the reading",
          "path": "content/notes/evidence/2026-11-04/round-nan-downstream.ps1",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "the sheet as Excel saved it",
          "path": "content/notes/evidence/2026-11-04/round-nan-downstream-sheet1.xml",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: full-bank result, the rules, what stays open",
          "path": "content/notes/evidence/2026-11-04/rounding-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        }
      ],
      "functions": [
        "FUNC.ROUND",
        "FUNC.ROUNDDOWN",
        "FUNC.ROUNDUP",
        "FUNC.TRUNC"
      ],
      "inferred": "That one decimal-to-binary conversion routine is the source of all these patterns is inferred from the exponent-overflow encoding.",
      "kind": "excel-differs-from-math",
      "note_id": "FN-ROUND-003",
      "open": [
        "How these patterns sort among themselves and with other numbers, and display width, are not recorded."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "ROUND(1.7976931348623157E+308, 0)",
          "correct": {
            "bits": "0x7fefffffffffffff",
            "display": "1.7976931348623157e+308",
            "how": "DBL_MAX is an integer, so rounding it to 0 places returns it.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x7ff000000000000a",
            "display": "NaN bit pattern, shown as 1.8E+308",
            "kind": "nonfinite"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x7fefffffffffffff",
                "display": "1.7976931348623157e+308",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
            "locator": "cells.A3",
            "note": null,
            "path": "content/notes/evidence/2026-11-04/round-nan-downstream.json",
            "repository": "ExcelFunctionsHandbook"
          }
        },
        {
          "call": "ROUND(1.7976931348623157E+308, -307)",
          "correct": {
            "bits": null,
            "display": "#NUM!",
            "how": "The rounded value exceeds the largest binary64; Excel reports overflow in its own arithmetic as #NUM!.",
            "kind": "error"
          },
          "excel": {
            "bits": "0x7ff005419221015d",
            "display": "NaN bit pattern, shown as 1.8E+308",
            "kind": "nonfinite"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x7fefffffffffffff",
                "display": "1.7976931348623157e+308",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0xc073300000000000",
                "display": "-307",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
            "locator": "cells.A2",
            "note": null,
            "path": "content/notes/evidence/2026-11-04/round-nan-downstream.json",
            "repository": "ExcelFunctionsHandbook"
          }
        },
        {
          "call": "ROUND(1.7976931348623157E+308, -308)",
          "correct": {
            "bits": null,
            "display": "#NUM!",
            "how": "The rounded value exceeds the largest binary64; Excel reports overflow in its own arithmetic as #NUM!.",
            "kind": "error"
          },
          "excel": {
            "bits": "0x7ff1ccf385ebc8a0",
            "display": "NaN bit pattern, shown as 2E+308",
            "kind": "nonfinite"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x7fefffffffffffff",
                "display": "1.7976931348623157e+308",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0xc073400000000000",
                "display": "-308",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
            "locator": "cells.A1",
            "note": null,
            "path": "content/notes/evidence/2026-11-04/round-nan-downstream.json",
            "repository": "ExcelFunctionsHandbook"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "ROUND of a number near 1.8E308 can return a binary64 with an all-ones exponent field. A decimal result of 2^1024 or more keeps its 53-bit significand, and its exponent is carried into the exponent field without a check, so the bits are a NaN. ROUND, ROUNDDOWN and TRUNC return those bits; ROUNDUP gives #NUM!. The recorded rows hold 430 such ROUND rows, 102 ROUNDDOWN and 95 TRUNC, and all 627 follow this. Even ROUND(DBL_MAX,0), whose answer is DBL_MAX, returns 0x7ff000000000000a. The cell shows 2E+308 or 1.8E+308, and a pattern with its sign bit set shows 2E+308 too, with no minus. ISNUMBER gives TRUE, ISERROR FALSE, TYPE 1, ERROR.TYPE #N/A; A1=A1 and A1>0 are TRUE. =A1, N(A1), MAX(A1), ABS(A1) and IFERROR(A1,...) pass the pattern on, as does =-A1 with its sign unchanged. Arithmetic on it (A1+0, A1*1, A1-A1, SUM, ROUND) gives #NUM!, and TEXT(A1,\"0\") gives #VALUE!. Saved to .xlsx, each such cell is written as the error #NUM!; reopened, the cells read #NUM! until a full recalculation brings the patterns back.",
      "status": "measured",
      "title": "Near DBL_MAX, ROUND returns NaN bit patterns that Excel treats as numbers"
    },
    {
      "basis": "Under the family rules the recorded rows match ROUND 36,821 of 36,945, ROUNDUP 52,022 of 52,841, ROUNDDOWN 59,182 of 59,995 and TRUNC 50,504 of 51,317, with no row lost and each remaining failure classified in the write-up. All 13,914 informative ROUNDDOWN and TRUNC rows with large num_digits follow the rule.",
      "documentation": null,
      "evidence": [
        {
          "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
          "locator": null,
          "note": "the rules in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/catalogue/rounding.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: full-bank result, the rules, what stays open",
          "path": "content/notes/evidence/2026-11-04/rounding-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        }
      ],
      "functions": [
        "FUNC.ROUNDDOWN",
        "FUNC.ROUNDUP",
        "FUNC.TRUNC"
      ],
      "inferred": null,
      "kind": "excel-differs-from-math",
      "note_id": "FN-ROUNDUP-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "ROUNDUP(1.234567890123456e-200, 65536)",
          "correct": {
            "bits": "0x166e3d71f622be8f",
            "display": "1.234567890123456e-200",
            "how": "The exact decimal expansion of this binary64 number has fewer than 32768 places, so a truncation at num_digits places returns the number itself.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x166e3d71f622be8f",
                "display": "1.234567890123456e-200",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x40f0000000000000",
                "display": "65536",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111roundcount-ROUNDUP-00041",
            "note": null,
            "path": "runs/w111-rounding-count-refinement-20260929/answers-roundup.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ROUNDUP(1.234567890123456e-200, 65537)",
          "correct": {
            "bits": "0x166e3d71f622be8f",
            "display": "1.234567890123456e-200",
            "how": "The exact decimal expansion of this binary64 number has fewer than 32768 places, so a truncation at num_digits places returns the number itself.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3fb999999999999a",
            "display": "0.1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x166e3d71f622be8f",
                "display": "1.234567890123456e-200",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x40f0001000000000",
                "display": "65537",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111roundcount-ROUNDUP-00043",
            "note": null,
            "path": "runs/w111-rounding-count-refinement-20260929/answers-roundup.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ROUNDUP(1.234567890123456e-200, 32768)",
          "correct": {
            "bits": "0x166e3d71f622be8f",
            "display": "1.234567890123456e-200",
            "how": "The exact decimal expansion of this binary64 number has fewer than 32768 places, so a truncation at num_digits places returns the number itself.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x166e3d71f622be8f",
                "display": "1.234567890123456e-200",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x40e0000000000000",
                "display": "32768",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111roundcount-ROUNDUP-00033",
            "note": null,
            "path": "runs/w111-rounding-count-refinement-20260929/answers-roundup.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "TRUNC(1.234567890123456e-200, 65536)",
          "correct": {
            "bits": "0x166e3d71f622be8f",
            "display": "1.234567890123456e-200",
            "how": "The exact decimal expansion of this binary64 number has fewer than 32768 places, so a truncation at num_digits places returns the number itself.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x166e3d71f622be8f",
                "display": "1.234567890123456e-200",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x40f0000000000000",
                "display": "65536",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111roundcount-TRUNC-00041",
            "note": null,
            "path": "runs/w111-rounding-count-refinement-20260929/answers-trunc.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "ROUNDUP, ROUNDDOWN and TRUNC take the digit count from the low 16 bits of the integer part of |num_digits|, with the sign of num_digits. If |num_digits| is 2^32 or more, or those low bits are 32768 or more, the truncation happens at 100 places (10^-100, or 10^100 for a negative count). So 65536 acts as 0, 65537 as 1, 32768 to 65535 as 100, and -2147483748, whose low 16 bits are 100, as -100. In the out-of-range case ROUNDUP adds no unit for a positive count, and gives #NUM! for a negative count when a digit is dropped.",
      "status": "measured",
      "title": "ROUNDUP, ROUNDDOWN and TRUNC read num_digits from its low 16 bits"
    },
    {
      "basis": "Under the family rules the recorded rows match ROUND 36,821 of 36,945, ROUNDUP 52,022 of 52,841, ROUNDDOWN 59,182 of 59,995 and TRUNC 50,504 of 51,317, with no row lost and each remaining failure classified in the write-up.",
      "documentation": null,
      "evidence": [
        {
          "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
          "locator": null,
          "note": "the rules in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/catalogue/rounding.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: full-bank result, the rules, what stays open",
          "path": "content/notes/evidence/2026-11-04/rounding-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        }
      ],
      "functions": [
        "FUNC.ROUNDUP"
      ],
      "inferred": null,
      "kind": "excel-differs-from-math",
      "note_id": "FN-ROUNDUP-002",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "ROUNDUP(-1.125, 2)",
          "correct": {
            "bits": "0xbff2147ae147ae14",
            "display": "-1.13",
            "how": "The decimal answer has a nearest binary64 value; rounding away from zero at 2 places gives that value.",
            "kind": "number"
          },
          "excel": {
            "bits": "0xbff2147ae147ae15",
            "display": "-1.1300000000000001",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0xbff2000000000000",
                "display": "-1.125",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 1863, key ROUNDUP|0xbff2000000000000|0x4000000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/ROUNDUP.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ROUNDUP(3.535, 2)",
          "correct": {
            "bits": "0x400c51eb851eb852",
            "display": "3.54",
            "how": "The decimal answer has a nearest binary64 value; rounding away from zero at 2 places gives that value.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x400c51eb851eb851",
            "display": "3.5399999999999996",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x400c47ae147ae148",
                "display": "3.535",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 1809, key ROUNDUP|0x400c47ae147ae148|0x4000000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/ROUNDUP.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "ROUNDUP forms the ROUNDDOWN result, converts it to binary64, converts one unit 10^-p to binary64, and adds the two on the x87 unit, storing the sum to binary64. The sum need not be the binary64 value nearest the decimal answer, so ROUNDUP(-1.125,2) is -1.1300000000000001 and ROUNDUP(3.535,2) is 3.5399999999999996. The difference shows when the result is compared with a typed 3.54.",
      "status": "measured",
      "title": "ROUNDUP adds its unit in binary64, one bit from the decimal answer"
    },
    {
      "basis": "ROUNDUP rows match under these rules as counted in FN-ROUND-001. In the 1,148 recorded rows nearest the 2^-1026 boundary this quantity has 1 violation, itself an artefact of how the row was classified; the exact value, the reading and x minus the truncation give 54 to 547. The opposite-sign pair is a reading from Excel build 20527.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: full-bank result, the rules, what stays open",
          "path": "content/notes/evidence/2026-11-04/rounding-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
          "locator": null,
          "note": "the rules in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/catalogue/rounding.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
          "locator": "rounding_family_matches_recorded_bank_rows",
          "note": "three rows of Excel's answers; failed before the change",
          "path": "crates/calc-func/tests/f1_math.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.ROUNDUP"
      ],
      "inferred": null,
      "kind": "excel-differs-from-math",
      "note_id": "FN-ROUNDUP-003",
      "open": [
        "14 ROUNDUP rows of tiny magnitude stay unmatched, in the near-tie class of FN-ROUND-002."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "ROUNDUP(1.0001086461844975e-307, 307)",
          "correct": {
            "bits": "0x0041fa182c40c60d",
            "display": "2e-307",
            "how": "The number has a nonzero digit past 307 places, so rounding away from zero at 307 places gives 2E-307; nearest binary64.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x0031fa182c40c60d",
            "display": "1e-307",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x0031fa982c40c60e",
                "display": "1.0001086461844975e-307",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x4073300000000000",
                "display": "307",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
            "locator": "rounding_family_matches_recorded_bank_rows",
            "note": null,
            "path": "crates/calc-func/tests/f1_math.rs",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "ROUNDUP(-1.2225073858507202e-307, 308)",
          "correct": {
            "bits": "0x80375eb9065434ab",
            "display": "-1.3e-307",
            "how": "The number has a nonzero digit past 308 places, so rounding away from zero at 308 places gives -1.3E-307; nearest binary64.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x80359283684dba77",
            "display": "-1.2e-307",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x8035fa182c40c60e",
                "display": "-1.2225073858507202e-307",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x4073400000000000",
                "display": "308",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
            "locator": "rounding_family_matches_recorded_bank_rows",
            "note": null,
            "path": "crates/calc-func/tests/f1_math.rs",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "ROUNDUP(1.0000000022250739e-300, 307)",
          "correct": null,
          "excel": {
            "bits": "0x01a56e1fe6ed23b2",
            "display": "1.0000001000000001e-300",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x01a56e1fc3c5c026",
                "display": "1.0000000022250739e-300",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x4073300000000000",
                "display": "307",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
            "locator": "rounding_family_matches_recorded_bank_rows",
            "note": null,
            "path": "crates/calc-func/tests/f1_math.rs",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "ROUNDUP adds no unit when the unit itself is below the normal range, whichever the sign. For a positive number it also adds none when the 15-digit reading, as binary64, lies less than 2^-1026 above the truncation; negative numbers have no such distance. So ROUNDUP(1.0001086461844975E-307,307) is 1E-307 and ROUNDUP(-1.0001086461844975E-307,307) is -2E-307, with the same digits dropped. At -1.2225E-307 and 308 places the unit, 1E-308, is subnormal, and the answer stays at -1.2E-307.",
      "status": "measured",
      "title": "At tiny magnitudes ROUNDUP may add no unit, and the two signs differ"
    },
    {
      "basis": "Recorded rows of the broad capture; counts from the rounding write-up.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: full-bank result, the rules, what stays open",
          "path": "content/notes/evidence/2026-11-04/rounding-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        }
      ],
      "functions": [
        "FUNC.ROUNDDOWN",
        "FUNC.ROUNDUP",
        "FUNC.TRUNC"
      ],
      "inferred": null,
      "kind": "excel-differs-from-math",
      "note_id": "FN-TRUNC-001",
      "open": [
        "Why this one input converts 3 steps below nearest."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "TRUNC(2.2250738585072014e-308, 0)",
          "correct": {
            "bits": "0x0000000000000000",
            "display": "0",
            "how": "DBL_MIN is below 1, so truncating it at 0 or 1 places gives 0.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x000ffffffffffffa",
            "display": "2.2250738585071984e-308",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x0010000000000000",
                "display": "2.2250738585072014e-308",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111broad-20260929-TRUNC-00026",
            "note": null,
            "path": "runs/w111-broad-20260929/answers/answers-trunc.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "TRUNC(2.2250738585072014e-308, 1)",
          "correct": {
            "bits": "0x0000000000000000",
            "display": "0",
            "how": "DBL_MIN is below 1, so truncating it at 0 or 1 places gives 0.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x000ffffffffffffa",
            "display": "2.2250738585071984e-308",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x0010000000000000",
                "display": "2.2250738585072014e-308",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111broad-20260929-TRUNC-00027",
            "note": null,
            "path": "runs/w111-broad-20260929/answers/answers-trunc.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "With DBL_MIN (0x0010000000000000) as number, TRUNC, ROUNDDOWN and ROUNDUP return the subnormal 0x000ffffffffffffa at each num_digits recorded, so TRUNC(DBL_MIN,0) is not 0. That value is 6 steps below DBL_MIN and 3 steps below 0x000ffffffffffffd, the binary64 nearest the 15-digit reading 2.22507385850720E-308. The recorded rows hold 256 such cases for each of the three functions. ROUND gives 0 on the same inputs.",
      "status": "measured",
      "title": "TRUNC of DBL_MIN returns a subnormal, not 0"
    }
  ],
  "schema": "efh.function-reference/v1",
  "section_order": [
    "what-it-does",
    "try-it",
    "quirks",
    "how-to-implement",
    "version-differences",
    "alternatives"
  ],
  "sections": {
    "alternatives": "\n[ROUND](FUNC.ROUND.md) chooses a nearest decimal; [MROUND](FUNC.MROUND.md) chooses a multiple. [INT](FUNC.INT.md) floors negatives; [TRUNC](FUNC.TRUNC.md) removes their fraction toward zero.\n\n\n\n\n",
    "how-to-implement": "\nThe current worksheet wrapper reads numeric arguments in order and flushes subnormal numeric operands to zero. Return zero for a zero `number` before finding its decimal exponent. The following steps start with a finite, nonzero admitted input. The [stored-arithmetic chapter](../model/09-staged-arithmetic.md) explains exact binary decoding and significand rounding.\n\nFirst construct the number’s fifteen-significant-digit **reading**. Extract the exact binary64 value and find its decimal exponent `e` by comparisons with exact powers of ten, so `10^e <= abs(x) < 10^(e+1)`. Put `s=14-e`. When `abs(s)<=27`, evaluate `abs(x)*10^s` (or `abs(x)/10^(-s)`) with a 64-bit significand and extended exponent range, rounding to nearest/even. **Do not store that scaled value to binary64 before the integer decision.** Round it to an integer: exact halves go down for ROUND’s reading, up for the directed functions’ readings. Retain the sign and the exact decimal value `integer*10^(-s)`.\n\nThis reading step is a measured reconstruction with a known counterexample even inside the stated scale range. For `abs(s)>27`, Excel’s scaling is still open; the current code falls back to exact binary64-to-decimal rounding to fifteen digits. That fallback is a candidate, not an identified Excel stage.\n\n1. Truncate the magnitude of `num_digits` and retain its low sixteen bits, then restore the sign. Magnitudes at least `2^32`, or low bits at least `32768`, select an out-of-range sentinel of 100 places with the original sign.\n2. Before digit rounding, check the special initial-reading return described below. If it applies, return its packed result immediately. Otherwise truncate the exact decimal reading at unit `10^(-D)`, then convert that truncation to nearest binary64.\n3. If a nonzero digit was discarded, convert one unit separately to binary64, add it to the truncated magnitude with the stored 64-bit-significand operation from the variance recipe, and restore the sign. Do not convert the already-incremented decimal in one step: that has a different rounding history.\n4. Suppress the added unit if it is subnormal. For positive inputs also suppress it when the stored reading minus the stored truncation is below `2^-1026`. Negative inputs do not use that distance test. Out-of-range positive counts add no unit; negative ones give `#NUM!` when a unit would be required.\n\nWorked: `ROUNDUP(-1.125,2)` truncates its exact reading to `-1.12`. The separately converted `1.12` and `0.01` add to the recorded `1.1300000000000001`, whose sign is then restored. The final value is `-1.1300000000000001`, rather than the nearest binary64 conversion of the decimal `-1.13`.\n\nThe current boundary reconstruction handles a normal input below twice the minimum normal value whose initial reading becomes subnormal: convert twice the reading (a normal number) and decrement its encoded exponent field by one, retaining the sign and significand. This reproduces the observed packing rather than an ordinary subnormal conversion. Other final subnormals still flush. The large-scale reading and remaining last-bit discrepancies stay open; consult the dated failure breakdown.\n\n\n",
    "quirks": "\nThe recorded functions first read fifteen significant decimal digits. Asking to retain more digits can therefore change an input that mathematically needs no rounding. The recorded `ROUNDDOWN(283025097725723.5,0)` returns `283025097725724`, showing that the preliminary reading can move the number upward before truncation. Huge digit counts have recorded integer-conversion behaviour rather than a simple “keep everything” rule. Near the normal-range boundary and overflow, worksheet publication needs separate handling.\n\n\nThe exact-cell minimum normal input `0x0010000000000000` has a recorded early return of `0x000ffffffffffffa`, even at zero requested digits. That return happens before ordinary digit rounding. At the upper end, ROUNDUP returns `#NUM!` for the overflowing decimal result. See the [packing rules and worked encodings](../model/09-staged-arithmetic.md#decimal-family-packing-exceptions).\n\n\n",
    "sources": "\n- [Microsoft: ROUNDUP function](https://support.microsoft.com/en-us/excel/functions/roundup-function), opened 6 November 2026; syntax, documented argument rules and errors.\n- [DnaCalc implementation](https://github.com/DnaCalc/DnaCalc/blob/da3ecc4fb19a3a5529708c311d0e8f05688ac165/crates/calc-func/src/catalogue/rounding.rs); implementation steps and the limits identified in the text.\n- [Rounding research](../notes/evidence/2026-11-04/rounding-EVIDENCE.md): measured reading, count rules, overflow and remaining failures.\n\n",
    "try-it": "\n`=ROUNDUP(-7.21,1)` returns `-7.3`; `=ROUNDUP(721,-1)` returns `730`. “Up” means a larger magnitude, so a negative result becomes more negative.\n\n\n",
    "version-differences": "The recorded environments below distinguish a reading from a same-input comparison. Counts describe captured inputs in each environment; overlapping captures and comparisons are not totals of unique worksheet calls.\n\n| Excel 16.0 build | Platform and CPU | Captured inputs |\n|---|---|---:|\n| 19929 | Windows, bitness not recorded, CPU not recorded | 155 |\n| 20430 | Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics | 3,454 |\n| 20430 | Windows, 64-bit, CPU not recorded | 49,387 |\n\n- XC-ROUNDUP-001: build 19929 versus build 20430; 1 same-input pairs, 0 differing answers. Compared axes: excel-build. Numeric answers were compared by their recorded binary64 bits; other answers by typed value.\n\nAgreement on these compared inputs does not establish agreement on unmeasured inputs.\n\n[Recorded environments and comparison details](https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.ROUNDUP.json).\n\nRetained controls from the indexed captures:\n\n| Build and recorded CPU | Captured call or arguments | Excel result |\n|---|---|---|\n| 19929, CPU not recorded | [`=ROUNDUP(-1.08328420449386575,0)`](https://github.com/DnaCalc/CalcFunc-Evidence/blob/4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2/runs/W097-R-B-validation-cellref-module/comparisons/excel_sample_comparisons.jsonl.gz) | `-2.0` (`0xc000000000000000`) |\n| 20430, AMD Ryzen 7 4800H with Radeon Graphics | [`ROUNDUP(2.5,0)`](https://github.com/DnaCalc/CalcFunc-Evidence/blob/4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2/cache/oracle-20430/build-20430/ROUNDUP.jsonl.gz) | `3` (`0x4008000000000000`) |\n| 20430, CPU not recorded | [`ROUNDUP(817094511.6142203,6)`](https://github.com/DnaCalc/CalcFunc-Evidence/blob/4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2/runs/w111-directed-initial-discriminators-20260929/answers-roundup.json.gz) | `817094511.61422` (`0x41c859efb7ce9ec3`) |\n\nThese are earlier recorded answers, not new Excel runs or an additional cross-build comparison. The function JSON retains each source locator, exact argument bits where available, and input-route status. Call notation does not imply that captured binary64 values were entered as decimal formula literals.",
    "what-it-does": "\n`ROUNDUP(number, num_digits)` rounds away from zero when a nonzero part is discarded. Positive digit counts address places after the decimal point, zero the integer position, and negative counts places to its left.\n\n\n"
  },
  "signature": {
    "display": "ROUNDUP(number, num_digits)",
    "parameters": [
      {
        "description": null,
        "name": "number",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "num_digits",
        "optional": false,
        "repeats": false
      }
    ],
    "trailing_repeats": false
  },
  "sources": {
    "metadata": {
      "admission": {
        "label": "implemented",
        "reason": null
      },
      "arity": {
        "max": 2,
        "min": 2
      },
      "category": "Math and trigonometry functions",
      "classification": {
        "arg_preparation_profile": "ValuesOnlyPreAdapter",
        "coercion_lift_profile": "Custom",
        "determinism_class": "Deterministic",
        "error_collapse_profile": "None",
        "fec_dependency_profile": "None",
        "host_interaction_class": "None",
        "kernel_signature_class": "NumsToNum",
        "rich_value_usage": "RichBlind",
        "surface_fec_dependency_profile": "RefOnly",
        "thread_safety_class": "SafePure",
        "volatility_class": "NonVolatile"
      },
      "descriptions": {
        "long": null,
        "short": "Number rounded away from zero to a number of digits",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Rounds a number up, away from zero",
        "microsoft_url": "https://support.microsoft.com/en-us/office/roundup-function-f8bc9b23-e795-47db-8703-db171d0c42a7"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "ROUNDUP"
        },
        {
          "locale": "bg-BG",
          "name": "ROUNDUP"
        },
        {
          "locale": "cs-CZ",
          "name": "ROUNDUP"
        },
        {
          "locale": "da-DK",
          "name": "RUND.OP"
        },
        {
          "locale": "de-DE",
          "name": "ROUNDUP"
        },
        {
          "locale": "el-GR",
          "name": "ROUNDUP"
        },
        {
          "locale": "en-AU",
          "name": "ROUNDUP"
        },
        {
          "locale": "en-GB",
          "name": "ROUNDUP"
        },
        {
          "locale": "en-US",
          "name": "ROUNDUP"
        },
        {
          "locale": "es-ES",
          "name": "REDONDEAR.MAS"
        },
        {
          "locale": "et-EE",
          "name": "ROUNDUP"
        },
        {
          "locale": "fi-FI",
          "name": "PYÖRISTÄ.DES.YLÖS"
        },
        {
          "locale": "fr-FR",
          "name": "ARRONDI.SUP*"
        },
        {
          "locale": "he-IL",
          "name": "ROUNDUP"
        },
        {
          "locale": "hr-HR",
          "name": "ROUNDUP"
        },
        {
          "locale": "hu-HU",
          "name": "KEREK.FEL"
        },
        {
          "locale": "id-ID",
          "name": "ROUNDUP"
        },
        {
          "locale": "it-IT",
          "name": "ROUNDUP"
        },
        {
          "locale": "ja-JP",
          "name": "ROUNDUP"
        },
        {
          "locale": "ko-KR",
          "name": "ROUNDUP"
        },
        {
          "locale": "lt-LT",
          "name": "ROUNDUP"
        },
        {
          "locale": "lv-LV",
          "name": "ROUNDUP"
        },
        {
          "locale": "nb-NO",
          "name": "AVRUND.OPP"
        },
        {
          "locale": "nl-NL",
          "name": "AFRONDEN.NAAR.BOVEN"
        },
        {
          "locale": "pl-PL",
          "name": "ZAOKR.GÓRA"
        },
        {
          "locale": "pt-BR",
          "name": "ROUNDUP"
        },
        {
          "locale": "pt-PT",
          "name": "ARRED.PARA.CIMA"
        },
        {
          "locale": "ro-RO",
          "name": "ROUNDUP"
        },
        {
          "locale": "ru-RU",
          "name": "ОКРУГЛВВЕРХ"
        },
        {
          "locale": "sk-SK",
          "name": "ROUNDUP"
        },
        {
          "locale": "sl-SI",
          "name": "ROUNDUP"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "ROUNDUP"
        },
        {
          "locale": "sv-SE",
          "name": "AVRUNDA.UPPÅT"
        },
        {
          "locale": "th-TH",
          "name": "ROUNDUP"
        },
        {
          "locale": "tr-TR",
          "name": "YUKARIYUVARLA işlevi"
        },
        {
          "locale": "uk-UA",
          "name": "ROUNDUP"
        },
        {
          "locale": "vi-VN",
          "name": "ROUNDUP"
        },
        {
          "locale": "zh-CN",
          "name": "ROUNDUP"
        },
        {
          "locale": "zh-HK",
          "name": "ROUNDUP"
        },
        {
          "locale": "zh-TW",
          "name": "ROUNDUP"
        }
      ],
      "signature": {
        "display": "ROUNDUP(number, num_digits)",
        "parameters": [
          {
            "description": null,
            "name": "number",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "num_digits",
            "optional": false,
            "repeats": false
          }
        ],
        "trailing_repeats": false
      },
      "surface_name": "ROUNDUP",
      "version_marker": null,
      "xlcall": {
        "code": "212",
        "symbol": "xlfRoundup"
      }
    },
    "microsoft": "https://support.microsoft.com/en-us/office/roundup-function-f8bc9b23-e795-47db-8703-db171d0c42a7"
  },
  "try_it": {
    "formula": "=ROUNDUP(-1.125,2)"
  },
  "url": "https://handbook.dnacalc.com/functions/ROUNDUP.html",
  "variants": [],
  "versions": [
    {
      "behaviour": "ROUNDUP(1.234567890123456e-200, 65536) returned 1 (0x3ff0000000000000). ROUNDUP(1.234567890123456e-200, 65537) returned 0.1 (0x3fb999999999999a). 4 further recorded controls are attached. Inputs were supplied through cells using Value2. These are controls from this environment, not a same-input comparison with another build.",
      "excel_build": "16.0 build 20430",
      "observations": [
        {
          "call": "ROUNDUP(1.234567890123456e-200, 65536)",
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x166e3d71f622be8f",
                "display": "1.234567890123456e-200",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x40f0000000000000",
                "display": "65536",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture"
        },
        {
          "call": "ROUNDUP(1.234567890123456e-200, 65537)",
          "excel": {
            "bits": "0x3fb999999999999a",
            "display": "0.1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x166e3d71f622be8f",
                "display": "1.234567890123456e-200",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x40f0001000000000",
                "display": "65537",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture"
        },
        {
          "call": "ROUNDUP(1.234567890123456e-200, 32768)",
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x166e3d71f622be8f",
                "display": "1.234567890123456e-200",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x40e0000000000000",
                "display": "32768",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture"
        },
        {
          "call": "ROUNDUP(1.0001086461844975e-307, 307)",
          "excel": {
            "bits": "0x0031fa182c40c60d",
            "display": "1e-307",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x0031fa982c40c60e",
                "display": "1.0001086461844975e-307",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x4073300000000000",
                "display": "307",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture"
        },
        {
          "call": "ROUNDUP(-1.2225073858507202e-307, 308)",
          "excel": {
            "bits": "0x80359283684dba77",
            "display": "-1.2e-307",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x8035fa182c40c60e",
                "display": "-1.2225073858507202e-307",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x4073400000000000",
                "display": "308",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture"
        },
        {
          "call": "ROUNDUP(1.0000000022250739e-300, 307)",
          "excel": {
            "bits": "0x01a56e1fe6ed23b2",
            "display": "1.0000001000000001e-300",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x01a56e1fc3c5c026",
                "display": "1.0000000022250739e-300",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x4073300000000000",
                "display": "307",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture"
        }
      ],
      "platform": "Windows 64-bit, CPU not recorded in this capture",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/3345a87/content/notes/FN-ROUNDUP-001.json",
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/3345a87/content/notes/FN-ROUNDUP-003.json"
      ]
    },
    {
      "behaviour": "ROUNDUP(-1.125, 2) returned -1.1300000000000001 (0xbff2147ae147ae15). ROUNDUP(3.535, 2) returned 3.5399999999999996 (0x400c51eb851eb851). Inputs were supplied through cells using Value2. These are controls from this environment, not a same-input comparison with another build.",
      "excel_build": "16.0 build 20430",
      "observations": [
        {
          "call": "ROUNDUP(-1.125, 2)",
          "excel": {
            "bits": "0xbff2147ae147ae15",
            "display": "-1.1300000000000001",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0xbff2000000000000",
                "display": "-1.125",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H"
        },
        {
          "call": "ROUNDUP(3.535, 2)",
          "excel": {
            "bits": "0x400c51eb851eb851",
            "display": "3.5399999999999996",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x400c47ae147ae148",
                "display": "3.535",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H"
        }
      ],
      "platform": "Windows 64-bit, AMD Ryzen 7 4800H",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/3345a87/content/notes/FN-ROUNDUP-002.json"
      ]
    },
    {
      "behaviour": "155 captured inputs are indexed for this environment. Capture dates are not recorded. This is a reading count, not a comparison with another build. Retained control =ROUNDUP(-1.08328420449386575,0) returned -2.0 (0xc000000000000000). The selected archive row does not record its input plumbing; no input route is inferred.",
      "excel_build": "16.0 build 19929",
      "observations": [
        {
          "call": "=ROUNDUP(-1.08328420449386575,0)",
          "excel": {
            "bits": "0xc000000000000000",
            "display": "-2.0",
            "kind": "number"
          },
          "input_route": "not-recorded",
          "inputs": [],
          "recorded_in": "Excel 16.0 build 19929, Windows, bitness not recorded, CPU not recorded.",
          "source": {
            "commit": "4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2",
            "locator": "BSE-000000781",
            "path": "runs/W097-R-B-validation-cellref-module/comparisons/excel_sample_comparisons.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "platform": "Windows, bitness not recorded, CPU not recorded",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.ROUNDUP.json",
        "https://github.com/DnaCalc/CalcFunc-Evidence/blob/4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2/runs/W097-R-B-validation-cellref-module/comparisons/excel_sample_comparisons.jsonl.gz"
      ]
    },
    {
      "behaviour": "3,454 captured inputs are indexed for this environment. Capture dates: 2026-09-25 to 2026-09-25. This is a reading count, not a comparison with another build. Retained control ROUNDUP(2.5,0) returned 3 (0x4008000000000000). The selected archive row does not record its input plumbing; no input route is inferred.",
      "excel_build": "16.0 build 20430",
      "observations": [
        {
          "call": "ROUNDUP(2.5,0)",
          "excel": {
            "bits": "0x4008000000000000",
            "display": "3",
            "kind": "number"
          },
          "input_route": "not-recorded",
          "inputs": [
            {
              "name": "argument1",
              "value": {
                "bits": "0x4004000000000000",
                "display": "2.5",
                "kind": "number"
              }
            },
            {
              "name": "argument2",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics.",
          "source": {
            "commit": "4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2",
            "locator": "ROUNDUP|0x4004000000000000|0x0000000000000000",
            "path": "cache/oracle-20430/build-20430/ROUNDUP.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "platform": "Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.ROUNDUP.json",
        "https://github.com/DnaCalc/CalcFunc-Evidence/blob/4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2/cache/oracle-20430/build-20430/ROUNDUP.jsonl.gz"
      ]
    },
    {
      "behaviour": "49,387 captured inputs are indexed for this environment. Capture dates: 2026-09-29 to 2026-09-29. This is a reading count, not a comparison with another build. Retained control ROUNDUP(817094511.6142203,6) returned 817094511.61422 (0x41c859efb7ce9ec3). The capture specifies exact-double bulk Value2 cell input.",
      "excel_build": "16.0 build 20430",
      "observations": [
        {
          "call": "ROUNDUP(817094511.6142203,6)",
          "excel": {
            "bits": "0x41c859efb7ce9ec3",
            "display": "817094511.61422",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "argument1",
              "value": {
                "bits": "0x41c859efb7ce9ec5",
                "display": "817094511.6142203",
                "kind": "number"
              }
            },
            {
              "name": "argument2",
              "value": {
                "bits": "0x4018000000000000",
                "display": "6",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows, 64-bit, CPU not recorded.",
          "source": {
            "commit": "4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2",
            "locator": "w111initialdiscriminator-ROUNDUP-01242",
            "path": "runs/w111-directed-initial-discriminators-20260929/answers-roundup.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "platform": "Windows, 64-bit, CPU not recorded",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.ROUNDUP.json",
        "https://github.com/DnaCalc/CalcFunc-Evidence/blob/4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2/runs/w111-directed-initial-discriminators-20260929/answers-roundup.json.gz"
      ]
    }
  ]
}