Integer conversion without precision loss for literal function inputs

57 views (last 30 days)
The function uint64 can take a literal input that is not representable by double and convert without precision loss, like
uint64(7725400999518902274)
ans = uint64 7725400999518902274
Unfortunately, this functionality does not seem to extend to a function with an argument block and type validation.
function test(a)
arguments
a (1,1) uint64
end
disp(a)
end
test(7725400999518902274)
7725400999518902272
I would have to do
test(uint64(7725400999518902274))
7725400999518902274
Does anyone know if there is a trick to get this functionality or I am otherwise missing something?
  4 Comments
Dyuman Joshi
Dyuman Joshi on 20 Nov 2025 at 15:16
"The function uint64 can take a literal input that is not representable by double and convert without precision loss"
That is not true, it can do that within [0, 2^64-1]
uint64(123456789012345678901)
ans = uint64 18446744073709551615
uint64(2^64-1)
ans = uint64 18446744073709551615
uint64(2^64+1)
ans = uint64 18446744073709551615
AB
AB on 20 Nov 2025 at 16:18
Thanks everyone for the discussion, this might have been a bit of an unfair question without an answer beyond "no, there isn't".
To clarify, uint64 provides a special execution path that allows a literal that is not representable by a double but is representable by a uint64 to be created as a uint64 without precision loss, and I was hoping there might be a similar special handling that utilizes the arguments block.

Sign in to comment.

Accepted Answer

Matt J
Matt J on 20 Nov 2025 at 2:28
Edited: Matt J on 20 Nov 2025 at 13:51
test 7725400999518902274
a = uint64 7725400999518902274
function test(a)
arguments
a (1,:) string
end
a=eval("uint64("+ a + ")"),
end
  5 Comments

Sign in to comment.

More Answers (1)

Walter Roberson
Walter Roberson on 21 Nov 2025 at 7:55
Does anyone know if there is a trick to get this functionality
There is no way of doing that.
Any way of doing that would have to affect the inputs at parse time. However, arguement blocks do not affect parse time. Arguement blocks apply conversions to whatever input was passed in. By the time the arguement block processing is applied, the parameter has already been parsed as double precision.

Categories

Find more on Characters and Strings in Help Center and File Exchange

Products


Release

R2024b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!