Question about shader precision conversions.

The article : iOS and Android - Cross-Platform Challenges and Solutions said that precision conversions will require additional cycles.So I’ve tried to avoid it.But I have had a question now.
Look at the following snippets please.

1  struct vertexOutput
2  {
3      fixed4 pos : SV_POSITION;
4  };
5  vertexOutput vert(fixed4 vertexPos : POSITION)
6  {
7    vertexOutput output ;
8    output.pos = mul(UNITY_MATRIX_MVP, vertexPos);
9
10   return output;
11 }

As you can see, UNITY_MATRIX_MVP is a float4x4 variable(defined in UnityShaderVariables.cginc), both vertexPos and output.pos are fixed4x4.However, I can’t avoid precision conversions at line8.How to avoid?Thank you very much!

What prevents you from simply redefining variables vertexOutput.pos and vertexPos to be float4 instead? I.e.:

 1  struct vertexOutput
 2  {
 3      float4 pos : SV_POSITION;
 4  };
 5  vertexOutput vert(float4 vertexPos : POSITION)
 6  {
 7    vertexOutput output ;
 8    output.pos = mul(UNITY_MATRIX_MVP, vertexPos);
 9
 10   return output;
 11 }

In fact, most often, you’ll want positions to be float4. The fixed4 datatype is usually used only for fragment colors. In fact, now that I think about it, I’m pretty sure the fixed datatypes are clamped. The Cg specification on the topic states that the range must be at least -2/+2, but it doesn’t really matter what the range is - What matters is that you definitely do NOT want vertex positions to be clamped to some range. They should be float4.

Thank you very much!
As you said, I think I should use float4 for positions.