You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@solr.apache.org by GitBox <gi...@apache.org> on 2022/07/21 14:00:27 UTC
[GitHub] [solr] danrosher commented on pull request #940: SOLR-16292 : NVector for alternative great-circle distance calculations
danrosher commented on PR #940:
URL: https://github.com/apache/solr/pull/940#issuecomment-1191522782
Thanks for looking into this more @madrob .
I wasn't aware of SloppyMath. If we assume Math.acos correct, then to get the same accuracy with FastInvTrig to within 40cm, I've tested it takes 17 terms, which after running a benchmark means that:
```
Benchmark (num_points) Mode Cnt Score Error Units
FastInvTrigBenchmark.acosBM10 2000000 avgt 2 44.149 ms/op
FastInvTrigBenchmark.acosBM17 2000000 avgt 2 67.977 ms/op
FastInvTrigBenchmark.fastMathAcosBM 2000000 avgt 2 252.578 ms/op
FastInvTrigBenchmark.haversineBM 2000000 avgt 2 288.209 ms/op
FastInvTrigBenchmark.mathAcosBM 2000000 avgt 2 300.509 ms/op
FastInvTrigBenchmark.mathAsin 2000000 avgt 2 320.407 ms/op
FastInvTrigBenchmark.sloppyAsin 2000000 avgt 2 50.152 ms/op
FastInvTrigBenchmark.sloppyHaversinMeters 2000000 avgt 2 134.309 ms/op
FastInvTrigBenchmark.sloppyHaversinSortKey 2000000 avgt 2 82.845 ms/op
```
So then:
SloppyMath.HaversinSortKey is 1.9x slower than FastInvTrig with 10 terms (as you found)
SloppyMath.HaversinSortKey is 1.2x slower than FastInvTrig with 17 terms
However I also noticed that SloppyMath has an asin implementation, and with pi/2-asin(x) = acos(x)
https://www.wolframalpha.com/input?i2d=true&i=%5C%2840%29Divide%5Bpi%2C2%5D-asin%5C%2840%29x%5C%2841%29%5C%2841%29-acos%5C%2840%29x%5C%2841%29
after adding this into the benchmark, using nvector and this identity ^ for acos then:
FastInvTrig with 17 terms is 1.3x slower than SloppyMath.asin !
The caveat is that SloppyMath.asin uses more memory for caching values I think.
So I'm wondering now whether to abandon the FastInvTrig series expansion, and use SloppyMath.asin for NVector? What do you think ?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@solr.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@solr.apache.org
For additional commands, e-mail: issues-help@solr.apache.org