fsprojects / ExcelFinancialFunctions

.NET Standard library providing the full set of financial functions from Excel.
https://fsprojects.github.io/ExcelFinancialFunctions
Other
194 stars 66 forks source link

Find Root operation does not follow Excel spec as stated in comment => common.fs #27

Closed bjgallag closed 2 years ago

bjgallag commented 3 years ago

Description

Microsoft's documentation for the XIRR function states under the Remarks section that they guarantee 1x10^-6 accuracy; however, this library is using 1x10^-7 accuracy in common.fs findRoot function. Removing one zero would align with Microsoft's standards: https://support.microsoft.com/en-us/office/xirr-function-de1242ec-6477-445b-b11b-a303ad9adc9d

Repro steps

Please provide the steps required to reproduce the problem

  1. Call the financial.XIrr function with the following parameters. These dates are July 3rd, 2020 and Feb 25th, 2021: DateTime[] dateTimes = { new DateTime(2020,7,3), new DateTime(2021,2,25)}; double[] doubles = {-177900000, 8799805.85}; Financial.XIrr( doubles, dateTimes, 0.1);

Expected behavior

A value should be returned representing the IRR amount, which should be -0.990247691899517.

Actual behavior

Exception is generated saying that the root could not be found.

Known workarounds

N/a This issue can be fixed by changing the precision value in common.fs's findRoot method from 1x10^-7 to 1x10^-6.

Related information

jcoliz commented 2 years ago

Find root is definitely challenged. In this case, Xirr succeeds if you give a guess of -0.97 or -0.98, but fails with -0.96 or higher. So right now, you just need to guess better 😅 . It's interesting that changing the precision fixes the problem. Worth looking at this. Thanks for diagnosing the issue.

jcoliz commented 2 years ago

I committed the proposed change. It passed all the tests including the "console" interop tests. It's resting in the feature/issue-27 branch. I want to release the netcore replatforming out first without code changes. So I'll target this for a following bugfix release.