String to Float, without introducing errors

Thomas Passin list1 at tompassin.net
Sun Dec 18 15:06:35 EST 2022


Thanks for filling us in!  I wouldn't think the animations themselves 
would need such precision, though perhaps the calculations of the forces 
and motions do.  One way to check might be to perturb the initial 
conditions a bit and see if the changes in the motions seem to be 
correspondingly small.  That might help you work out if the problem is 
with the physics solution or the animation.  It would be easy to get 
some numerical instability in the calculations, for example if you are 
inverting matrices.

On 12/18/2022 2:00 PM, Paul St George wrote:
> So I am working on a physics paper with a colleague. We have a theory about Newtons Cradle. We answer the question why when you lift and drop balls 1 and 2, balls 4 and 5 rise up. I could say more, but ... (if you are interested please write to me).
> 
> We want to illustrate the paper with animations. The theory includes distortion of the balls and this distortion is very very small. So, I am sent data with locations and dimensions to 13 decimal places. Something strange is happening with the animations: the balls are not moving smoothly. I do not know (yet) where the problem lies so it is difficult to provide a clear narrative.
> 
> Because there is a problem, I am investigating in all areas. This brings me to the question I asked here. I am not expecting six decimal places or three decimal places to be as accurate as thirteen decimal places, but I would like to be in control of or fully aware of what goes on under the bonnet.
> 
> Here is a picture:
> https://paulstgeorge.com/newton/cyclography.html
> Thanks,
> Paul
> 
> 
> 
>   
>>> On 17 Dec 2022, at 16:54:05 EST 2022, Thomas Passin wrote:
> On 12/17/2022 3:45 PM, Paul St George wrote:
>> Thanks to all!
>> It was the rounding rounding error that I needed to avoid (as Peter J. Holzer suggested). The use of decimal solved it and just in time. I was about to truncate the number, get each of the characters from the string mantissa, and then do something like this:
>>
>> 64550.727
>>
>> 64550 + (7 * 0.1) + (2 * 0.01) + (7 * 0.001)
>>
>> Now I do not need to!
> 
> And that approach would not have helped you, because each of those
> calculations would be done as floating point, and you wouldn't have
> gotten any more precision (and maybe less) than simply doing
> float('64550.727').
> 
> Here is a small but interesting discussion thread about float vs Decimal:
> 
> https://stackoverflow.com/questions/32053647/comparing-python-decimals-created-from-float-and-string
> 
> Would you mind telling us why that degree of precision (that is, decimal
> vs float) matters for your problem?
> 
> 
>>> On 17 Dec 2022, at 13:11, Alan Gauld <learn2program at gmail.com <https://mail.python.org/mailman/listinfo/python-list>> wrote:
>>>
>>> On 17/12/2022 11:51, Paul St George wrote:
>>>> I have a large/long array of numbers in an external file. The numbers look like this:
>>>>
>>>> -64550.727
>>>> -64511.489
>>>> -64393.637
>>>> -64196.763
>>>> -63920.2
>>>
>>>> When I bring the numbers into my code, they are Strings. To use the
>>>> numbers in my code, I want to change the Strings to Float type
>>>> because the code will not work with Strings but I do not want
>>>> to change the numbers in any other way.
>>>
>>> That may be impossible. Float type is not exact and the conversion
>>> will be the closest binary representation of your decimal number.
>>> It will be very close but it may be slightly different when you
>>> print it, for example. (You can usually deal with that by using
>>> string formatting features.)
>>>
>>> Another option is to use the decimal numeric type. That has other
>>> compromises associated with it but, if retaining absolute decimal
>>> accuracy is your primary goal, it might suit you better.
>>>
>>>
>>> -- 
>>> Alan G
>>> Author of the Learn to Program web site
>>> http://www.alan-g.me.uk/
>>> http://www.amazon.com/author/alan_gauld
>>> Follow my photo-blog on Flickr at:
>>> http://www.flickr.com/photos/alangauldphotos
>>>
>>>
>>
> 
> 
> 
> 
> 
> 
> 
> 
> 



More information about the Python-list mailing list