Our idea to make the function "FloatWidth" safer is as follows. ----- int Float Width(double floatIn) { if (floatIn <= 0.0) return -1; // ADDED, BUT please make the condition more validly double float_exponent = fabs( log10( floatIn ) ); ++float_exponent; return (int)float_exponent; ----- The actual processing flow with Test_SPAM is as follows. (assuming using AmberTools23 with updates 1-6 are applied) 1. In the function "DataIO_Std:WriteDataNormal" (DataIO_Std.cpp, line 1220), in if-block (lines 1240-1260) x_col_format.SetCoordFormat( maxFrames, Xdim.Min(), Xdim.Step(), xcol_width, xcol_precision ); // line 1259 is called with Xdim.Step()==0.0 (*). (*) With Test_SPAM, the if-block is executed twice: 1st time Xdim.Step()==1.0, and 2nd time Xdim.Step()==0.0. 2. In the function "TextFormat::SetCoordFormat" (TextFormat.cpp, line 52), in if-block (lines 61-65) In case of step==0.0, FloatWidth( step ); // line 62 is called. 3. In the function "FloatWidth" (StringRoutines.cpp, line 98), "2147483647" is generated. As floatIn==0.0, the value of float_exponent in lines 99 and 100 is as follows, respectively. float_exponent = fabs( log10( floatIn ) ) = fabs(log10(0.0)) = fabs(-Infinity) = +Infinity ++float_exponent (= +Infinity) The return value (int)float_exponent (= (int)(+Infinity)) depends on the platform, i.e., On Intel: -2147483648 On ARM: +2147483647 4. In the function "TextFormat::SetCoordFormat" (TextFormat.cpp, line 52) again In if-statement (line 63), On Intel: as prec_exp_width < 0, col_precision is not changed On ARM: as prec_exp_width = +2147483647, col_precision is now +2147483647 5. In the function "DataIO_Std:WriteDataNormal" (DataIO_Std.cpp, line 1220) again On Intel: x_col_format.fmt()=%8.3f On ARM: x_col_format.fmt()=%8.2147483647f, which may cause segmentation fault