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

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

I've run some benchmarks and accuracy tests on {{SafeNorm}} vs the code above. 
The approaches I tested are 
* exact - BigDecimal with MathContext.DECIMAL128
* unsafe - direct, unchecked computation with doubles
* safe - current {{SafeNorm}} code
* herbert - the code above
 
The accuracy results are below for 100,000 vectors of length 3. The "non-finite 
count" column indicates how many computed results were not finite.
|| Name || ulp error mean || ulp error std dev || non-finite count ||
| exact | 0.0 | 0.0 | 0 |
| unsafe | 5578.94225972039 | 18.57625771920449 | 9803 |
| safe | 0.01339 | 4.2343109585731824E-5 | 0 |
| herbert | 2.0E-4 | 6.324586943350534E-7 | 0 |

Here are the performance results for the same number of inputs:
||Benchmark||Mode||Cnt||Score||Error||Units||
|NormsPerformance.exact|avgt|5|1220297639.200 |± 356780909.362  |ns/op|
|NormsPerformance.herbert|avgt|5|2477818.076 |±    256183.380  |ns/op|
|NormsPerformance.safe|avgt|5|3116261.568 |±    603776.022  |ns/op|
|NormsPerformance.unsafe|avgt|5|983066.792 |±    103953.143  |ns/op|

_Conclusion_
The code Alex has above is far more accurate and moderately more performant 
than {{SafeNorm}}. I suggest we replace the existing {{SafeNorm}} 
implementation with this new code. The only question is how do we structure the 
API. Perhaps we could create a {{Norms}} class with methods for L!, L2, and 
LInf norms and overloads for 1D, 2D, 3D, and ND vectors?



> 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