math/big pow() and floor() help

1,060 views
Skip to first unread message

Owen Waller

unread,
Mar 1, 2016, 3:39:12 PM3/1/16
to golang-nuts
Hi,

I find myself trying to covert some Python code to Go which uses arbitrary large numbers.
The original Python code takes the square root and floors the result of one of these numbers.

But, looking at Go's math/big package, I can't work out how square root one of these numbers. There doesn't, at first glance, seem to be an arbitrary "pow" function. Likewise the floor function.

As this isn't my usual area, I feel don't understanding something fundamental. Does anyone have any pointers, or packages, or example code that can point me in the right direction?

Thanks

Owen

Tamás Gulácsi

unread,
Mar 1, 2016, 5:31:01 PM3/1/16
to golang-nuts

alb.do...@gmail.com

unread,
Mar 1, 2016, 6:12:07 PM3/1/16
to golang-nuts, go-...@kulawe.com
For floor you have to use Float.Int() (https://golang.org/pkg/math/big/#Float.Int)

I have Sqrt, Log and Pow implementations here: https://godoc.org/github.com/ALTree/floatutils

DISCLAIMER: I don't guarantee correctness of the last decimal digit

It's not a real library, more like a few experiments (I'd like to see at least Sqrt merged in
math/big, but not right now, it's not tested enough).

Owen Waller

unread,
Mar 1, 2016, 6:34:23 PM3/1/16
to golan...@googlegroups.com
Ah ha. Thank you very much Alberto. This should get me a lot further.

On a more general point. Given that you have written this, is math/big might lacking some more functions. Do you, or anyone else, have an list of functions that should be added?

This isn't my area by any means, but if it scratches an itch, I'll offer to help.

Owen
--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

alb.do...@gmail.com

unread,
Mar 1, 2016, 6:43:24 PM3/1/16
to golang-nuts, go-...@kulawe.com
I think it would be nice to have Sqrt, Pow, Log and Exp in math/big. Everything
else is probably not worth it (at least not in the standard library).

Keith Randall

unread,
Mar 1, 2016, 6:54:43 PM3/1/16
to golang-nuts, go-...@kulawe.com, alb.do...@gmail.com
math/big.Exp is the equivalent of math.Pow.
I'm not sure why you would want math.Exp (e^x) or math.Log (log_e) in an integer library.
math/big.BitLen is approximately math.Log2.

alb.do...@gmail.com

unread,
Mar 1, 2016, 6:59:53 PM3/1/16
to golang-nuts, go-...@kulawe.com, alb.do...@gmail.com
Hi Keith,

we are talking about multi-precision floats (big.Float) not multi-precision ints (big.Int) : )

Rob Pike

unread,
Mar 1, 2016, 7:49:18 PM3/1/16
to Alberto Donizetti, golang-nuts, go-...@kulawe.com
Ivy (github.com/robpike/ivy) has implementations of these functions, but they are not ideally wrapped for general use.  I apologize for putting words in his mouth, but I believe Robert Griesemer has been thinking about adding some transcendentals to math/big, or more likely a separate library.


-rob

Owen Waller

unread,
Mar 2, 2016, 7:05:55 PM3/2/16
to golan...@googlegroups.com
Many thanks for pointing me towards Ivy and the github issue. Both very helpful.

If we could have this support added to math/big or as a new package in the Go 1.7 timeframe that would be fantastic.

Owen
Reply all
Reply to author
Forward
0 new messages