Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

default Epsilon and MinNormal same for both mathgl32 and mathgl64 #55

Open
ghost opened this issue Mar 23, 2016 · 4 comments
Open

default Epsilon and MinNormal same for both mathgl32 and mathgl64 #55

ghost opened this issue Mar 23, 2016 · 4 comments

Comments

@ghost
Copy link

ghost commented Mar 23, 2016

They should quite obviously be different

@ghost ghost changed the title epsilon and MinNormal same for both mathgl32 and mathgl64 default Epsilon and MinNormal same for both mathgl32 and mathgl64 Mar 23, 2016
@dmitshur
Copy link
Member

dmitshur commented Apr 2, 2016

For reference, they are currently:

// Epsilon is some tiny value that determines how precisely equal we want our floats to be
// This is exported and left as a variable in case you want to change the default threshold for the
// purposes of certain methods (e.g. Unproject uses the default epsilon when determining
// if the determinant is "close enough" to zero to mean there's no inverse).
//
// This is, obviously, not mutex protected so be **absolutely sure** that no functions using Epsilon
// are being executed when you change this.
var Epsilon float{32,64} = 1e-10

var MinNormal = float{32,64}(1.1754943508222875e-38) // 1 / 2**(127 - 1)

Do you have a suggestion for what values they should be for 32 and 64-bit versions of mathgl?

Also, what is MinNormal? It's not documented beyond "1 / 2**(127 - 1)", and I don't know what that is.

@ghost
Copy link
Author

ghost commented Apr 3, 2016

So I have no clue what MinNormal is either. But according to this
https://github.com/golang/go/blob/master/src/math/const.go#L30-L33
it should be 1 / 2**(1023 - 1)

as for the default epsilon, my naive approach would be to make this n times smaller where n = MinNonZeroFloat32/MinNonZeroFloat64 but since Epsilon is already arbitrary i guess it could be any value that doesn't break the tests. (but it will obviously be much smaller)

@ghost
Copy link
Author

ghost commented Apr 3, 2016

https://www.wolframalpha.com/input/?i=(1e-10)%2F((1+%2F+2**(127+-+1+%2B+23))%2F(1+%2F+2**(1023+-+1+%2B+52)))
1e-289 i guess, but my method if most likely incorrect (it seems wayyyy too accurate)

@Zyl9393
Copy link
Contributor

Zyl9393 commented Mar 24, 2023

So, I stubbed my toe on this one: https://github.com/go-gl/mathgl/blob/master/mgl64/quat.go#L440
That threshold value is way too large for its first use in the function. It's fine for the other use though.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants