@@ -873,8 +873,11 @@ uint16_t Segment::calc_virtualLength() const {
873873 vLen = max (vW,vH); // get the longest dimension
874874 break ;
875875 case M12_pArc:
876- vLen = sqrt16 (vW * vW + vH * vH);
877- if (vW != vH) vLen++; // round up
876+ { unsigned vLen2 = vW * vW + vH * vH; // length ^2
877+ if (vLen2 < UINT16_MAX) vLen = sqrt16 (vLen2); // use faster function for 16bit values
878+ else vLen = sqrtf (vLen2); // fall-back to float if bigger
879+ if (vW != vH) vLen++; // round up
880+ }
878881 break ;
879882 case M12_jMap: // WLEDMM jMap
880883 if (jMap)
@@ -888,7 +891,7 @@ uint16_t Segment::calc_virtualLength() const {
888891 if (nrOfVStrips ()>1 )
889892 vLen = max (vW,vH) * 4 ;// 0.5; // get the longest dimension
890893 else
891- vLen = max (vW,vH) * 0.5 ; // get the longest dimension
894+ vLen = max (vW,vH) * 0 .5f ; // get the longest dimension
892895 break ;
893896 case M12_sPinwheel:
894897 vLen = getPinwheelLength (vW, vH);
@@ -906,23 +909,23 @@ uint16_t Segment::calc_virtualLength() const {
906909// WLEDMM used for M12_sBlock
907910static void xyFromBlock (uint16_t &x,uint16_t &y, uint16_t i, uint16_t vW, uint16_t vH, uint16_t vStrip) {
908911 float i2;
909- if (i<=SEGLEN*0.25 ) { // top, left to right
910- i2 = i/(SEGLEN*0.25 );
912+ if (i<=SEGLEN*0 .25f ) { // top, left to right
913+ i2 = i/(SEGLEN*0 .25f );
911914 x = vW / 2 - vStrip - 1 + i2 * vStrip * 2 ;
912915 y = vH / 2 - vStrip - 1 ;
913916 }
914- else if (i <= SEGLEN * 0.5 ) { // right, top to bottom
915- i2 = (i-SEGLEN*0.25 )/(SEGLEN*0.25 );
917+ else if (i <= SEGLEN * 0 .5f ) { // right, top to bottom
918+ i2 = (i-SEGLEN*0 .25f )/(SEGLEN*0 .25f );
916919 x = vW / 2 + vStrip;
917920 y = vH / 2 - vStrip - 1 + i2 * vStrip * 2 ;
918921 }
919922 else if (i <= SEGLEN * 0.75 ) { // bottom, right to left
920- i2 = (i-SEGLEN*0.5 )/(SEGLEN*0.25 );
923+ i2 = (i-SEGLEN*0 .5f )/(SEGLEN*0 .25f );
921924 x = vW / 2 + vStrip - i2 * vStrip * 2 ;
922925 y = vH / 2 + vStrip;
923926 }
924927 else if (i <= SEGLEN) { // left, bottom to top
925- i2 = (i-SEGLEN*0.75 )/(SEGLEN*0.25 );
928+ i2 = (i-SEGLEN*0 .75f )/(SEGLEN*0 .25f );
926929 x = vW / 2 - vStrip - 1 ;
927930 y = vH / 2 + vStrip - i2 * vStrip * 2 ;
928931 }
0 commit comments