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.
Open the Claude text cleaner · Full measured data
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.
| Fixture and mode | Input string and code points | Output and cleaner status | Observed 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.cjsReference 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.