[ 
https://issues.apache.org/jira/browse/NUMBERS-156?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17344538#comment-17344538
 ] 

Matt Juntunen commented on NUMBERS-156:
---------------------------------------

So... I made a mistake computing the std dev so all of those values are wrong. 
(I used "=" instead of "+=".) Here are the actual results, including the 
version with the Kahan summation. The std dev values are now pretty consistent 
between runs.

||name||input||type||error mean||error std dev||error min||error max||failed||
|direct|high|NaN|-0.00|Infinity|-Infinity|200000|
|enorm|high|0.0172|0.684|-2.00|3.00|0|
|enormMod|high|-0.00128|0.502|-2.00|2.00|0|
|enormModKahan|high|-0.000815|0.493|-2.00|2.00|0|
|direct|high-thresh|-0.00201|0.503|-2.00|2.00|0|
|enorm|high-thresh|0.0165|0.683|-2.00|2.00|0|
|enormMod|high-thresh|-0.00205|0.501|-2.00|2.00|0|
|enormModKahan|high-thresh|-0.00201|0.499|-2.00|2.00|0|
|direct|mid|-0.00177|0.506|-2.00|2.00|0|
|enorm|mid|-0.00177|0.506|-2.00|2.00|0|
|enormMod|mid|-0.00177|0.506|-2.00|2.00|0|
|enormModKahan|mid|-0.00131|0.496|-2.00|2.00|0|
|direct|low-thresh|1.00e-05|0.502|-2.00|2.00|0|
|enorm|low-thresh|0.0185|0.683|-2.00|2.00|0|
|enormMod|low-thresh|-3.00e-05|0.500|-2.00|2.00|0|
|enormModKahan|low-thresh|1.50e-05|0.498|-2.00|2.00|0|
|direct|low|6.84e+06|6.70e+08|-2.15e+09|2.15e+09|404|
|enorm|low|0.0191|0.682|-2.00|2.00|0|
|enormMod|low|0.000650|0.503|-2.00|2.00|0|
|enormModKahan|low|0.00112|0.494|-2.00|2.00|0|
|direct|full|-1.47e+04|4.43e+06|-1.33e+09|2.37e+06|20128|
|enorm|full|0.0118|0.180|-2.00|2.00|0|
|enormMod|full|0.000165|0.134|-2.00|1.00|0|
|enormModKahan|full|0.000160|0.134|-2.00|1.00|0|

{{enormModKahan}} consistently has the lowest std dev across all exponent 
ranges, although the difference is slight. Here are the performance benchmarks.

||Benchmark||(type)||Mode||Cnt||Score||Error||Units||
|direct|low|avgt|5|15361280.529|±   292202.242|ns/op|
|direct|mid|avgt|5|520697.721|±    28644.444|ns/op|
|direct|high|avgt|5|517801.887|±   104893.641|ns/op|
|direct|full|avgt|5|951827.119|±   118513.195|ns/op|
|enorm|low|avgt|5|1986518.135|±   319268.787|ns/op|
|enorm|mid|avgt|5|1119078.784|±    37970.437|ns/op|
|enorm|high|avgt|5|1968502.909|±    62335.088|ns/op|
|enorm|full|avgt|5|3201915.597|±    77111.214|ns/op|
|enormMod|low|avgt|5|804732.957|±     6855.089|ns/op|
|enormMod|mid|avgt|5|814270.565|±   104127.054|ns/op|
|enormMod|high|avgt|5|837129.985|±    66755.395|ns/op|
|enormMod|full|avgt|5|1575207.552|±    37762.767|ns/op|
|enormModKahan|low|avgt|5|974512.192|±    25598.720|ns/op|
|enormModKahan|mid|avgt|5|1019614.135|±   163308.413|ns/op|
|enormModKahan|high|avgt|5|1075077.374|±   271268.724|ns/op|
|enormModKahan|full|avgt|5|1636619.080|±    86228.187|ns/op|

As you predicted, {{enormModKahan}} is only slightly slower than {{enormMod}}. 
I'm undecided on whether the extra overhead is worth it. What do you think?




> SafeNorm 3D overload
> --------------------
>
>                 Key: NUMBERS-156
>                 URL: https://issues.apache.org/jira/browse/NUMBERS-156
>             Project: Commons Numbers
>          Issue Type: Improvement
>            Reporter: Matt Juntunen
>            Priority: Major
>
> We should create an overload of {{SafeNorm.value}} that accepts 3 arguments 
> to potentially improve performance for 3D vectors.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to