Skip to content

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
LocalIdentity pushed a commit to PathOfBuildingCommunity/PathOfBuilding-PoE2 that referenced this pull request Aug 27, 2025
Wires77 pushed a commit to PathOfBuildingCommunity/PathOfBuilding-PoE2 that referenced this pull request Aug 28, 2025
Tonkat pushed a commit to Tonkat/PathOfBuilding-PoE2 that referenced this pull request Sep 1, 2025
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