Zerowidth CleanerAll measured guides

CLAUDE WATERMARK REMOVER · PRACTICAL TEST

Why does a cleaned BigInt division return 2 instead of 2.5?

Our cleaned 5 parses as BigInt, and 5n / 2n returns 2n with remainder 1n. Negative -5n gives quotient -2n and remainder -1n. BigInt division truncates toward zero; successful cleanup does not choose fractional arithmetic.

Tested October 22, 2026 · v24.19.0 · 4 measured runs

Open the Claude text cleaner · Full measured data

Code-point comparison for Marked positive integer

Measured inputs and outputs

These are locally constructed test strings, not evidence that Claude inserts these characters. We executed the saved homepage script snapshot with a minimal DOM harness and compared exact strings. The invisible-checkbox state and dash mode appear in each row. The observations below test this page's specific question. Destination observations run independently on the exact input and cleaned strings in the recorded Node runtime. We make no detector-score or statistical-watermark removal claim.

Before and after observations; full code points and strings are in the JSON download.
Fixture and modeInput string and code pointsOutput and cleaner statusObserved before / after
Marked positive integer
direct string / keep / invisible true
"5​"
U+0035 U+200B
"5"
Removed 1 invisible character
{"error":"SyntaxError"}
{"input":"5","quotient":"2","remainder":"1","recombined":"5"}
Positive integer
direct string / keep / invisible true
"5"
U+0035
"5"
No selected invisible characters found
{"input":"5","quotient":"2","remainder":"1","recombined":"5"}
{"input":"5","quotient":"2","remainder":"1","recombined":"5"}
Negative integer
direct string / keep / invisible true
"-5"
U+002D U+0035
"-5"
No selected invisible characters found
{"input":"-5","quotient":"-2","remainder":"-1","recombined":"-5"}
{"input":"-5","quotient":"-2","remainder":"-1","recombined":"-5"}
Even integer
direct string / keep / invisible true
"6"
U+0036
"6"
No selected invisible characters found
{"input":"6","quotient":"3","remainder":"0","recombined":"6"}
{"input":"6","quotient":"3","remainder":"0","recombined":"6"}

A successful integer parse is only the first stage

The marked source spells five followed by U+200B and initially fails BigInt construction with SyntaxError. After deletion, the observer records input five, quotient two and remainder one for division by the fixed 2n divisor. Recombining quotient times divisor plus remainder yields five. Every result is converted to decimal text explicitly so the downloadable JSON can retain it without attempting to serialize a BigInt directly. These separate fields expose the discarded fractional part without suggesting the cleaner removed it: the original source never contained a decimal point or a fractional digit.

The negative control distinguishes truncation from floor

Plain five reproduces the positive quotient and remainder without cleanup. Negative five gives quotient negative two and remainder negative one, then recombines to negative five. A floor-toward-negative-infinity assumption would not describe that recorded quotient. Even six divides exactly into three with zero remainder. These controls show why one exact division is insufficient evidence for fractional support and why positive-only examples can conceal the direction used for negative results. The divisor and operand types are constant in the harness; no mixing of Number and BigInt is used in the arithmetic.

Preserve the remainder when the application needs it

Choose an arithmetic representation that matches the intended result. If integer quotient and remainder are the desired output, retain and interpret both rather than treating a successful parse as permission to drop the remainder. If fractions are required, define that representation explicitly before calculation. This page does not recommend converting arbitrary large values to Number, which would introduce the separate precision boundary covered in an earlier guide. The homepage neither divides values nor selects arithmetic types. It returns the cleaned string, and the observer independently chooses BigInt construction and a fixed integer division contract.

The experiment is deliberately narrow

We use four authored integer spellings and one nonzero positive divisor in the recorded Node runtime. We do not test division by zero, fractional input, decimal libraries or a destination accounting rule. The reconstruction field is a local consistency check for the measured quotient and remainder, not a guarantee about every calculation a user may perform later. The existing BigInt pages concern conversion and export; this one begins after conversion and asks what division actually returns. None of these strings is captured Claude output, and an exact recombination does not establish authorship or removal of a statistical watermark.

Reproduce this test

Save reproduce.cjs and tested-app.js in the same folder. Run the command below with Node.js. The harness prints its runtime, script SHA-256 and every measured row. Compare those rows with the original record. Using a newer script or runtime creates a new experiment; retain the version information with your rerun.

node reproduce.cjs

Reference and next check

ECMAScript BigInt divide provides the relevant primary definition. The table and fixture analysis are original measurements. For broader inspection, use our Unicode inspector. Read the scope distinction before interpreting cleanup as a watermark result.