[Scilab-Dev] Big literal integers for int64() and uint64()
Antoine ELIAS
antoine.elias at scilab-enterprises.com
Sat Oct 27 20:28:50 CEST 2018
Hello again,
I worked on it ( challenge accepted ! )
I took a look of your implementation, I'm not sure it is necessary to
remove trailing white spaces or inner spaces ( " 1 000 000 " is not a
correct representation of a number, that's all ! )
Or you have to manage "\t", "," or any localized separator.
In lot of language when you convert "123toto" you get 123 not an error.
And does not allow "1.123" is a mistake for me since uint64(1.123) ->
1(ui64).
I made an implementation in builtin for all (u)int functions that raises
error only on too long input string ("10000000000000000000" for example
) and empty string ( but we can convert to 0 like %nan )
I manage "nan", "NaN" "%nan", "inf", "Inf", "%inf", "-inf", "-Inf",
"-%inf" to respectively 0, minval and maxval
And "icing on the cake", is little bit faster than yours :p
(between 2 and 100 times depending of input size, C++ vs script)
(missing NRT, changes ... but it is Saturday ^^ )
https://codereview.scilab.org/#/c/20587/
Regards,
Antoine
Le 27/10/2018 à 17:34, Samuel Gougeon a écrit :
> Hello Antoine,
>
> Thanks for your answer.
> I have opened a bug report #15837
> <http://bugzilla.scilab.org/show_bug.cgi?id=15837> about this topic.
>
> About the overload:
>
> Le 27/10/2018 à 14:00, Antoine ELIAS a écrit :
>> Hello Samuel,
>>
>> Currently, parser ... lexer, in fact, try to read "number" and
>> convert it to floating point number, at this moment, we have no idea
>> what the final goal of this number.
>> After that, the parser try to understand what to do with this number
>> (already a double).
>> So I think the first case is not possible with the current management
>> of numbers.
>>
>> For string argument, I think it cannot be done easily in an overload
>> macro for the same reason.
>
> In the report, i have posted a proposal for a working 11-rows-long
> %c_uint64() overload (without the error messages ;)
> With it, we get for instance
>
> --> %c_uint64("9000000000000001000") + [ 1 -1001 ; 4 7]
> ans =
> 9000000000000001001 8999999999999999999
> 9000000000000001004 9000000000000001007
>
> whereas
> --> uint64(9000000000000001000) + [ 1 -1001 ; 4 7]
> ans =
> 9000000000000001025 9000000000000000023
> 9000000000000001028 9000000000000001031
>
> It can process any relevant input array of any number of dimensions.
>
> Best regards
> Samuel
>
>
>
> _______________________________________________
> dev mailing list
> dev at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/dev/attachments/20181027/8e6906b5/attachment.htm>
More information about the dev
mailing list