I changed my formula very slightly earlier today. It's been corrected in my previous posts in this thread.
Now I'm going to try and explain from start to finish how my theory works, and how it only works if you start with 13 bits, and allow the result after haste to stay 12 bit if it drops to 12 bits...
Example #1 - Why you can only start with 13 bits at the very most, but after haste is applied, the recast must be able to drop below 13 bits accuracy...
Here is my explanation for the recast time of Aero IV + 150/1024 haste & -52% FC.
This shows from start to finish the base recast time, then haste applied to it, then fast cast -- giving the final answer the same as the in-game recast, as 20 seconds, not the 21 seconds that might otherwise have been reached.
Aero IV recast in resources as an integer:
Code:
0 0 0 0 0 1 0 0 0 0 1 0 1|0 0 0 0 0 0 0 0 0 0 0 0
= = = = = = = = = = = = =|= = = = = = = = = = = =
4 2 1 5 2 1 6 3 1 8 4 2 1|. . . . . . . . . . . .
0 0 0 1 5 2 4 2 6 5 2 1 0 0 0 0 0 0 0 0 0
9 4 2 2 6 8 5 2 6 3 1 0 0 0 0 0 0
6 8 4 5 2 1 5 7 3 1 0 0 0
5 2 6 8 9 9 9 4 2
5 2 1 0 5 7 8 4
5 2 6 3 6 8 4
5 2 1 5 2 1
5 2 6 8 4
5 2 1 0
5 2 6
5 2
5
128 + 4 + 1
= 133
Aero IV recast in seconds (13 bits):
Code:
0 0 0 0 0 0 0 1 0 0 0 0 1|0 1 0 0 0 0 0 0 0 0 0 0
= = = = = = = = = = = = =|= = = = = = = = = = = =
4 2 1 5 2 1 6 3 1 8 4 2 1|. . . . . . . . . . . .
0 0 0 1 5 2 4 2 6 5 2 1 0 0 0 0 0 0 0 0 0
9 4 2 2 6 8 5 2 6 3 1 0 0 0 0 0 0
6 8 4 5 2 1 5 7 3 1 0 0 0
5 2 6 8 9 9 9 4 2
5 2 1 0 5 7 8 4
5 2 6 3 6 8 4
5 2 1 5 2 1
5 2 6 8 4
5 2 1 0
5 2 6
5 2
5
32 + 1 + 0.25
= 33.25 seconds
Aero IV recast in seconds as the significand of a floating point (13 bit accuracy in 12 stored bits):
Code:
1 0 0 0 0 1 0 1 0 0 0 0 0|0 0 0 0 0 0 0 0 0 0 0 0
= = = = = = = = = = = = =|= = = = = = = = = = = =
4 2 1 5 2 1 6 3 1 8 4 2 1|. . . . . . . . . . . .
0 0 0 1 5 2 4 2 6 5 2 1 0 0 0 0 0 0 0 0 0
9 4 2 2 6 8 5 2 6 3 1 0 0 0 0 0 0
6 8 4 5 2 1 5 7 3 1 0 0 0
5 2 6 8 9 9 9 4 2
5 2 1 0 5 7 8 4
5 2 6 3 6 8 4
5 2 1 5 2 1
5 2 6 8 4
5 2 1 0
5 2 6
5 2
5
4096 + 128 + 32
= 4256
The value of the recast in seconds has been shifted 7 bits to the left to use all 12 bits and the extra bit.
Now apply 150/1024 haste, from haste spell effect being present:
Code:
4256 * (1 - 150/1024) = 3632.5625
After haste is applied, then the recast to now attempt to store in the significand is 3632.5625:
Code:
0 1 1 1 0 0 0 1 1 0 0 0 0|1 0 0 1 0 0 0 0 0 0 0 0
= = = = = = = = = = = = =|= = = = = = = = = = = =
4 2 1 5 2 1 6 3 1 8 4 2 1|. . . . . . . . . . . .
0 0 0 1 5 2 4 2 6 5 2 1 0 0 0 0 0 0 0 0 0
9 4 2 2 6 8 5 2 6 3 1 0 0 0 0 0 0
6 8 4 5 2 1 5 7 3 1 0 0 0
5 2 6 8 9 9 9 4 2
5 2 1 0 5 7 8 4
5 2 6 3 6 8 4
5 2 1 5 2 1
5 2 6 8 4
5 2 1 0
5 2 6
5 2
5
2048 + 1024 + 512+ 32 + 16 (+ 0.5 + 0.0625)
= 3632 (3632.5625)
This is only using a 12-bit significand now... if it was made to represent 13-bits again, with the bits shifted left by 1 bit, the .5 could be represented too.
If the result was 3632.5 or 3632.5625 though, the final recast after fast cast would be wrong.
The .5625 is lost as it does not fit into the significand, which leaves the signficand as 3632 now.
Now to apply fast cast...
RDM90 "Fast Cast V" job trait: -30% FC
RDM60 AF1 hat: -10% FC
RDM74 AF2 body: -10% FC
RDM90 AF3 earring: -2% FC
truncate( 52 / 2 ) = -26% FC recast reduction
3632.5625 * (1 - 26/100) = 2688.09625 (12 +3 bits = no truncation)
3632.5 * (1 - 26/100) = 2688.05 (12 +1 bits)
3632 * (1 - 26/100) = 2687.68 (12 bits):
Code:
0 1 0 1 0 0 1 1 1 1 1 1 1|1 0 1 0 1 1 1 0 0 0 0 1
= = = = = = = = = = = = =|= = = = = = = = = = = =
4 2 1 5 2 1 6 3 1 8 4 2 1|. . . . . . . . . . . .
0 0 0 1 5 2 4 2 6 5 2 1 0 0 0 0 0 0 0 0 0
9 4 2 2 6 8 5 2 6 3 1 0 0 0 0 0 0
6 8 4 5 2 1 5 7 3 1 0 0 0
5 2 6 8 9 9 9 4 2
5 2 1 0 5 7 8 4
5 2 6 3 6 8 4
5 2 1 5 2 1
5 2 6 8 4
5 2 1 0
5 2 6
5 2
5
2048 + 512 + 64 + 32 + 16 + 8 + 4 + 2 + 1
= 2687
Now to shift this value "101001111111" (2687) back 7 bits to the right, to give the final recast value in seconds:
Code:
0 0 0 0 0 0 0 0 1 0 1 0 0|1 1 1 1 1 1 1 0 0 0 0 0
= = = = = = = = = = = = =|= = = = = = = = = = = =
4 2 1 5 2 1 6 3 1 8 4 2 1|. . . . . . . . . . . .
0 0 0 1 5 2 4 2 6 5 2 1 0 0 0 0 0 0 0 0 0
9 4 2 2 6 8 5 2 6 3 1 0 0 0 0 0 0
6 8 4 5 2 1 5 7 3 1 0 0 0
5 2 6 8 9 9 9 4 2
5 2 1 0 5 7 8 4
5 2 6 3 6 8 4
5 2 1 5 2 1
5 2 6 8 4
5 2 1 0
5 2 6
5 2
5
16 + 4 (+0.5 + 0.25 + 0.125 + 0.0625 + 0.03125 + 0.015625 + 0.0078125)
= 20 seconds (20.9921875)
If more accuracy than 13 bits is used, after applying haste the recast value would be very slightly higher, then after applying fast cast to this, the final recast would be 21 seconds, instead of what the in-game recast timer shows, which is 20 seconds.
-----
Example #2 - Why you can't start with any less than 13 bits of accuracy either...
Reraise + 30/1024 haste & -19% FC
Reraise recast in resources as an integer:
Code:
0 0 0 0 0 1 1 1 1 0 0 0 0|0 0 0 0 0 0 0 0 0 0 0 0
= = = = = = = = = = = = =|= = = = = = = = = = = =
4 2 1 5 2 1 6 3 1 8 4 2 1|. . . . . . . . . . . .
0 0 0 1 5 2 4 2 6 5 2 1 0 0 0 0 0 0 0 0 0
9 4 2 2 6 8 5 2 6 3 1 0 0 0 0 0 0
6 8 4 5 2 1 5 7 3 1 0 0 0
5 2 6 8 9 9 9 4 2
5 2 1 0 5 7 8 4
5 2 6 3 6 8 4
5 2 1 5 2 1
5 2 6 8 4
5 2 1 0
5 2 6
5 2
5
128 + 64 + 32 + 16
= 240
Reraise recast in seconds (13 bits):
Code:
0 0 0 0 0 0 0 1 1 1 1 0 0|0 0 0 0 0 0 0 0 0 0 0 0
= = = = = = = = = = = = =|= = = = = = = = = = = =
4 2 1 5 2 1 6 3 1 8 4 2 1|. . . . . . . . . . . .
0 0 0 1 5 2 4 2 6 5 2 1 0 0 0 0 0 0 0 0 0
9 4 2 2 6 8 5 2 6 3 1 0 0 0 0 0 0
6 8 4 5 2 1 5 7 3 1 0 0 0
5 2 6 8 9 9 9 4 2
5 2 1 0 5 7 8 4
5 2 6 3 6 8 4
5 2 1 5 2 1
5 2 6 8 4
5 2 1 0
5 2 6
5 2
5
32 + 16 + 8 + 4
= 60 seconds
Reraise recast in seconds as the significand of a floating point (13 bit accuracy in 12 stored bits):
Code:
1 1 1 1 0 0 0 0 0 0 0 0 0|0 0 0 0 0 0 0 0 0 0 0 0
= = = = = = = = = = = = =|= = = = = = = = = = = =
4 2 1 5 2 1 6 3 1 8 4 2 1|. . . . . . . . . . . .
0 0 0 1 5 2 4 2 6 5 2 1 0 0 0 0 0 0 0 0 0
9 4 2 2 6 8 5 2 6 3 1 0 0 0 0 0 0
6 8 4 5 2 1 5 7 3 1 0 0 0
5 2 6 8 9 9 9 4 2
5 2 1 0 5 7 8 4
5 2 6 3 6 8 4
5 2 1 5 2 1
5 2 6 8 4
5 2 1 0
5 2 6
5 2
5
4096 + 2048 + 1024 + 512
= 7680
The value of the recast in seconds has been shifted 7 bits to the left to use all 12 bits and the extra bit.
Now apply the 30/1024 haste (Headlong Belt):
Code:
7680 * (1 - 30/1024) = 7455
After haste is applied, then the recast to now attempt to store in the significand is 7455:
Code:
1 1 1 0 1 0 0 0 1 1 1 1 1|0 0 0 0 0 0 0 0 0 0 0 0
= = = = = = = = = = = = =|= = = = = = = = = = = =
4 2 1 5 2 1 6 3 1 8 4 2 1|. . . . . . . . . . . .
0 0 0 1 5 2 4 2 6 5 2 1 0 0 0 0 0 0 0 0 0
9 4 2 2 6 8 5 2 6 3 1 0 0 0 0 0 0
6 8 4 5 2 1 5 7 3 1 0 0 0
5 2 6 8 9 9 9 4 2
5 2 1 0 5 7 8 4
5 2 6 3 6 8 4
5 2 1 5 2 1
5 2 6 8 4
5 2 1 0
5 2 6
5 2
5
4096 + 2048 + 1024 + 256 + 16 + 8 + 4 + 2 + 1
= 7455
This time, the recast after haste has remained in 13 bits, not dropping to 12 as in "Example #1".
If however, the recast were to be forced to 12 bits accuracy, the value would be equal to 7454, which would give an incorrect final recast value after fast cast.
Now to apply fast cast...
/RDM43 "Fast Cast II" job trait: -15%
Loquacious Earring: -2%
Incantor Stone: -2%
truncate( 19 / 2 ) = -9% FC recast reduction
7454 * (1 - 9/100) = 6783.14 (13 -1 bits)
7455 * (1 - 9/100) = 6784.05 (13 bits):
Code:
1 1 0 1 0 1 0 0 0 0 0 0 0|0 0 0 0 1 1 0 0 1 1 0 0
= = = = = = = = = = = = =|= = = = = = = = = = = =
4 2 1 5 2 1 6 3 1 8 4 2 1|. . . . . . . . . . . .
0 0 0 1 5 2 4 2 6 5 2 1 0 0 0 0 0 0 0 0 0
9 4 2 2 6 8 5 2 6 3 1 0 0 0 0 0 0
6 8 4 5 2 1 5 7 3 1 0 0 0
5 2 6 8 9 9 9 4 2
5 2 1 0 5 7 8 4
5 2 6 3 6 8 4
5 2 1 5 2 1
5 2 6 8 4
5 2 1 0
5 2 6
5 2
5
4096 + 2048 + 512 + 128
= 6784
Now to shift this value "1101010000000" (6784) back 7 bits to the right, to give the final recast value in seconds:
Code:
0 0 0 0 0 0 0 1 1 0 1 0 1|0 0 0 0 0 0 0 0 0 0 0 1
= = = = = = = = = = = = =|= = = = = = = = = = = =
4 2 1 5 2 1 6 3 1 8 4 2 1|. . . . . . . . . . . .
0 0 0 1 5 2 4 2 6 5 2 1 0 0 0 0 0 0 0 0 0
9 4 2 2 6 8 5 2 6 3 1 0 0 0 0 0 0
6 8 4 5 2 1 5 7 3 1 0 0 0
5 2 6 8 9 9 9 4 2
5 2 1 0 5 7 8 4
5 2 6 3 6 8 4
5 2 1 5 2 1
5 2 6 8 4
5 2 1 0
5 2 6
5 2
5
32 + 16 + 4 + 1
= 53 seconds
If instead 12 bits accuracy was used, the result would have been 52 seconds, but the in-game recast timer is 53.