Skip to content

Use harmonic mean for dual wield attack speed calc instead of average #8900

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

Conversation

Tntmister
Copy link
Contributor

@Tntmister Tntmister commented Jul 26, 2025

Fixes incorrect calculation of attack speed while dual wielding.
Fixes #8898

Description of the problem being solved:

Attack speed while dual wielding is currently calculated using a simple average (MH + OH)/2, when a harmonic mean 2 / ( 1/MH + 1/OH) is the correct way to calculate average of attack speed. A simple average would have to be applied to the attack time to be the correct formula.

More detail is in this reddit thread: https://old.reddit.com/r/pathofexile/comments/1m8ytld/big_misconception_on_dual_wielding_pob_and_wiki/

Steps taken to verify a working solution:

  • Verified dual wielding
  • Verified dual wielding with skills that use both weapons at the same time (they also average their attack times)
  • Verified 1h + shield/empty offhand stays the same

Link to a build that showcases this PR:

eNrtXG1v2zgS_lz_CsLAAXvYTWzJsp0EyS6ctybYpPXaaXv3aUFLtM0LJboSlTS76H-_ISnJsmvqxTLu020XrS3OMxzOcIYzQyXnv33zGXohYUR5cNG2jrttRAKXezRYXLQ_Pd0enbR_-7V1PsZi-XF-GVMmR35tvTtXnxEjL4QBro0EDhdEfE459f4ETisciCXhwSP-Dw_fc--i_YEHpI1mOPCoSL-5DEfRB-yTi_bUBXAb4cglgXe1fp4QLnGIXUHCBznrKBb8kXswKsIYRn1Mgyl3n4l4H_J4ddG22-iFkldNc_84_jh5yolEg7xIsKJ352OG30g4FVigCP66aI9AMXhBrrEPfwM3zGJgZfW77U4h4DIOI7GFsvtDE2q6IsRbsz92nFPHsoYDZ9jtn5pA45DczOfEFfSFXIVUXC1x4K6nM4pYl_YxZoKuGCVhOf3dD6ytrpH4iQvMrsfTtYas4XG27pOTYhwX5eJ8oWJ5yUC3e8wisfeLgAqyJ3jMacSDBuvLQ80WihkDh6xEOyERCV-woJtimXlzf0aDvbT3iAN8xaMKNpKUYxKCv4tagClxOYSIunPURD7QOalOWWsdCaCuNPut42Zala424_0EmkBorEY55TGrSCnWIco2Ul2TbxWo7gNRidcLF-rEKpNNOfXN3Tij7J0c97vD065lD7tDsyONl28RdTF7xN-oH_sQYJ_wM1lP2C_YLIulCCA2mKC9gQl6S0NSH3XFmWdEWUbUEvOoPuwRDvs7yCJGrhtDTvBWboGP83k9gPS2CnqGw9s9k7T3gVuN6acgVJE4d-b3CwETcCyZWMwYqYhYT5G4Z5UDWU-1IEEyX0UdPRDiLt-DPSZYkGrBOKNyitUqaSupVRLuUKtTEVBDSRJoUNLxsAhUU003AQkXb9MlJcyrR50KdoVXFWKmVHMeXUndm9PV2jF5aE2VfMGhV-1kqSvTC47yUdzqF6tLk1fbmATyTwB4pGrOPQ75f2RWz-rBRqHP47CiwTVxpQWkB5CuZibEi91qJ15WnFwyKMq2lmH3S2EgKGO7sGYVCIHd52vuLSprTU1SC7Ep3zRerSCIyO1QlYE8XCETp7mM5qjXL6f-CHu5kkvLc3h7gkEF6soTZJlF9WVsQaqvRWYHNRazJq88RWbQR4gWPpwCqhp_5LmC3GgcKL4qVVKKsGJFN-avIPlSdlOietSQRa0zJ6MoIQn-eqvMf4O80gQ3gQcJFrhC5Tm2EbumeaI-RNIousYCIy9Juz_jkOJA2Kr_FBEcussHMP0tZmwGkeCinX-qvqn20C1lgoTX8ExOKgXb5milRj_vqDaX_HTvr3goEPkm_xnjULxdtOeYRUQTqifAJxI0UCU2xCPG2mi65K8j70XO9MQ5i1IQwqsVCbwNHk8hIQin0cWVQqjFyy_IxxFI_aa3ayRXk-uS3XtqGQEHASA3PDnp9eTaZT2Gw7fRJmFAQS4Bc-WadfYg6cNpTnLad-efJg_qw7ulEKvorNN5fX09XmGx5HPyDQ6oY5f7nRWAQOCj6JkydiTZdkbw3-VipP5TjDopp3PdoIs6-pt00pCCzNrIHblQpXWpCfnhAxckkmPyYfrlfCqnisCaoXhP_OjyDRzrViYUWz2LRJWSekqE3iV5TNo59Mgcx0w-_yPGjErLdvNPH3STM-Chn1ViwAosK-O_5vj0tpKqHz086JEREwkzOV1qZm3ORCBEvdTEyUPVwxytpb7CzI2U3DRwWexBjZHEnGwbMTyTssmurawPvHw3NMcpm-jdOciTEL9nfIaZnUKSXi6Uu2hBfLkRHonAHnhc517AIjpyJR3FDj5dw-qg4qbP6sxTbiMh-cdqS2w__JpTcfJZkWhttzdEs1LRthbn8jjQ9gywn_iKnAMlkyTbS8v6P9NvuokT86qNrLeq_KjmUhT3wSoWSvKLtk8j989ZPJ_LLjVoDOSXjfeb29ubq6f7zzcJ0zxEafXPIPZnsiWr_5XNbk05JSo_Q1E8i_THi_ZnSl6VINdgT8oiqUDG8CoiWfxRezGRnAGugJuiglI97W_v5rUmMHO6-UZCCJcLSOzdkBKjXNl4iVB6Qpn0y-PCxE22js2MdBJ5BcFWFyUGTamOvZmLbJwblyMHC7Bw0GBmnDkZLdGEkNEI3ILOqStP2mKTy9ilqQr0kvVNjPZOMmAzD9WLNzHQg2aw7qeb0MlogVZVL9-oVT1qhl8TFxvXrgfN4KzO5QGoycQloyrg9IEHapOD04wok9mq0bI3jGQkZoYfxZKESU5h4vQIMSolKXSckM5iYXbjHEWBrlTXzaAhOWaG6s6SYQ1yrCASbXRbDArN05hZ6S6FMZAVQXXlYtRfUgcVmCDpARjUr0cLlJC2QQzrT4YLnETF39ELp56uhQ3uskVWFDAgXWzORhX4zdlsV_zNOd5Cxv1stHcyaoZ_ElSmTzu46BylEhPpVM04SN9qxuEJ0i8Rh2RvBpPtTGSNnRTnIFmVuhOcjhZFjqR43ZuDLrH3hqsOwN5oFf8h9yawgsIDIKMp8A8RB9egDFHgGxVZKbF2B5L16mrx0kfhzpXW5qgdPLmqKooBmqSEEZzldwXZYjVOWRfrjmAmXz7grBnDH67kmjCTrfh4hQMvZfdxV46-tkNF7XERAU_VobmWHf-mOgyI_7aDkVmu805a1anejayzko4TFKIX7XDdLf-Lc__fF-0jy-qeHg9PT239KOksDJNuAuTg1xQsGaodmM4sCf8FBWbPObbtrr4qPlcVedLhkJ-zBoeZTxwRfUX_heAVDxQi15aQXNJKXjbe8u2JCTwWb2fo04f7Pz7dtC5D2c-dEfzcgpQG3WHfJ2EraZ6doXFIkH08OO5uPuodD_OPruIQ5BMtXXASD2UjvVbSOjlDdreVtIzO0OQI_rSUyibkqxqDaohRl8pRu_V3IvyZ9d3u_kOW9CHBYEEkAxNKIxOC_6WloZ5cI-xfet8twCiLAUJtBY17WsK5tOTMa_0NcX5BzrrH_e8_9btHw_4_85OkFyVIb5KcNL_Y3_sb8ugaE6kick3X--70jVT2xpCsINVcut-BdOWVF_Dnn-zuUa8LEgqO5CUC0tljIV3Wpc8Ty-bJI_cmEoIUUF519tPtkbRajBR2KUWvlMIppeiXUgxKKYalFOlbGqodtsNnnHTJu3zmEYfPiM8RnEbomscz2fhAvwdS5a0xg60ZxD76PaTRth91t_1op2vZg2q-5ez2rcsj-JPzrYGT9y2rtbmBdXfOtA1_hr2qP8pNpXL4dDNr30CvS8pAC7Jj90WWU6CKvPfmHc066R7ZVreaq9kbUIAd2U5FqAMRYAMMHm4Pu5VdfCuA7HZxRwWmYhrNa8NFB0dW4qGYMQSFvUxlQIy1l0ab4UbdOm-bJ0JL_AK7B6zjZtZxMZwKSPVeNowg1SFtvqa82qCUUXSL_74i6NaN8gsVdsuFSBBFIjibxkxiXHkE3Yn_-ade98hJTGDY--vXZP8fMX-ImAUUp6UUVrecpFyrVrlarXK9Ws7OI0Be5pizq817HsYFooAZzz5NHuTFgu7qw7Z6kXWJHNJ3cJ1igJ4GWWuIVQa55JAxo9HsLYrkxlWxH_VrzHlJmNjG2zXwqo5HvT1WiaaveLU9tbMPowbLT3jYB-Cxe0GDAyxocIAF7cVj14KsOptr1-7sHUAj9qFWU2e_3RHmE9FIHzucbdBYArs2h8ZT9g6l__4BNoN1APewDiCHU3MnHCrE2E090jmAAuufGQcLsb2m67cbunA9Abw3pO9tmuxBnVs04bDbsfuNOQwOZVbrUDGm_tZsrkensS37h9lUdRY_8mNGxAEiYe8AAaXX0CmdhnjrMPrf-6SsvWmd2oh9sqg1xN5Hq_2msfpAZnEOFVwOllfvXULVwE1km8duHJrsw9jgYCfFIQo-Z7811VV-8zP-QMlGv7EgzY-4Qd1g0DR4_Dih7vroVzvljR_2yFTd9n0hso0f6StBdTOn3vjkwZwukjs6_SW5pVP47AkSVDCSewU23y_Kv_npxpHg_iP3ovWbohMScRYLgp6Iuwzo15i07hcBDwnKXrdCE_I1pqHqGkct-YYZCjiiwVLeDwo040Ecgb7nIffXoKi1pCLp11rdjSYs1fyJuiNbpT1xT7f213eeic7HDLtE3p-RMFmGAia_8yB9fXXY7ZYANn4UJIX1ylDZlVb6tmr2vqztWGUz5n5TQgrrl2DyP92TYUqXBk_2kE_OtQdMXfKsESeOmd7PmtryNxrAdvGm6u1Y-fr1lLD5movVr7DG2orJrDeWbyBkRq-Kqm8Iuce2VXpyOiiBZS_OZdroWk6vwu7anqpXZadU1cXU5epFBDBYlBOtZIbk5_w4Y6oDnvfQEmR6xqWAgXV6cmrGRHRB2ce5en0JhFTvYFUVcvOHEms7TWUNLuEkMCjwvJPFb_0iiPr2a-u8s_2rcv4LeKq5Fw==

Before screenshots:

image

After screenshots:

image image

@LocalIdentity LocalIdentity added the bug: calculation Numerical differences label Jul 26, 2025
@Tntmister Tntmister changed the title Use harmonic mean for attack speed calc instead of average Use harmonic mean for dual wield attack speed calc instead of average Jul 26, 2025
@Nightblade
Copy link
Contributor

(HARMONICMEAN added to spellchecker)

@LocalIdentity LocalIdentity merged commit 7ada228 into PathOfBuildingCommunity:dev Aug 1, 2025
1 of 2 checks passed
@Tntmister Tntmister deleted the attack-speed-harmonic-mean branch August 1, 2025 07:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug: calculation Numerical differences
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Dual Wield attack speed calculation should average attack times, not attack speeds.
3 participants