### Godot version

4.0+

### System information

Windows 11 22H2

### Issue description

The new feature to link components of a vector value in the inspector, so changing them individually maintains a ratio, has a flaw when it comes to zero values. Since you can't use 0 to build a sensible ratio (what's the ratio of 0 / 20 or 12 / 0 / 5?), having any component reach this value results in values not being updated in a sensible manner anymore.

In plain terms, if you set up some ratio, enable linking, and then drag one of the components in the inspector through the value of 0 multiple times, eventually every component will have the same value (sometimes they will have different signs, depending on the exact starting values). It looks like this:

https://github.com/godotengine/godot/assets/11782833/b5c9b04e-0895-465d-8976-0ba2872149c6


https://github.com/godotengine/godot/assets/11782833/35b9d12a-2994-4d53-b297-f1721036d6e0


https://github.com/godotengine/godot/assets/11782833/09de4cce-5012-4f4c-9aeb-bf48f2bf019f


https://github.com/godotengine/godot/assets/11782833/ee5940b9-c2bd-4b3b-a7d7-b86984bc4250

### Steps to reproduce

You can reproduce it with any engine property with linking available, such as position of spatial (2D, 3D) nodes. Here's a short script I used to test all Vector2/3/4 types (relies on changes from https://github.com/godotengine/godot/pull/77135):

```gdscript

@tool
extends Node3D

var my_vector2 : Vector2
var his_vector2i : Vector2i
var your_vector3 : Vector3
var her_vector3i : Vector3i
var their_vector4 : Vector4
var our_vector4i : Vector4i

func _get_property_list() -> Array:
	return [
		{
			"name": "my_vector2",
			"type": TYPE_VECTOR2,
			"hint": PROPERTY_HINT_LINK,
		},
		{
			"name": "his_vector2i",
			"type": TYPE_VECTOR2I,
			"hint": PROPERTY_HINT_LINK,
		},
		{
			"name": "your_vector3",
			"type": TYPE_VECTOR3,
			"hint": PROPERTY_HINT_LINK,
		},
		{
			"name": "her_vector3i",
			"type": TYPE_VECTOR3I,
			"hint": PROPERTY_HINT_LINK,
		},
		{
			"name": "their_vector4",
			"type": TYPE_VECTOR4,
			"hint": PROPERTY_HINT_LINK,
		},
		{
			"name": "our_vector4i",
			"type": TYPE_VECTOR4I,
			"hint": PROPERTY_HINT_LINK,
		},
	]

```

### Minimal reproduction project

See above.
spin[i]->set_h_size_flags(SIZE_EXPAND_FILL);
		}
	}
	ratio.resize(component_count * (component_count - 1));
	ratio.fill(1.0);
	linked = memnew(TextureButton);
	linked->set_toggle_mode(true);
	linked->set_stretch_mode(TextureButton::STRETCH_KEEP_CENTERED);
	linked->set_tooltip_text(TTR("Lock/Unlock Component Ratio"));
	linked->connect(SNAME("pressed"), callable_mp(this, &EditorPropertyVectorN::_update_ratio));
	linked->connect(SNAME("toggled"), callable_mp(this, &EditorPropertyVectorN::_store_link));
	hb->add_child(linked);
	add_child(hb);
	if (!horizontal) {
		set_label_reference(spin_sliders[0]); 
	}
}
EditorPropertyVector2::EditorPropertyVector2(bool p_force_wide) :
		EditorPropertyVectorN(Variant::VECTOR2, p_force_wide, EDITOR_GET("interface/inspector/horizontal_vector2_editing")) {}
EditorPropertyVector2i::EditorPropertyVector2i(bool p_force_wide) :
		EditorPropertyVectorN(Variant::VECTOR2I, p_force_wide, EDITOR_GET("interface/inspector/horizontal_vector2_editing")) {}
EditorPropertyVector3::EditorPropertyVector3(bool p_force_wide) :
		EditorPropertyVectorN(Variant::VECTOR3, p_force_wide, EDITOR_GET("interface/inspector/horizontal_vector_types_editing")) {}
EditorPropertyVector3i::EditorPropertyVector3i(bool p_force_wide) :
		EditorPropertyVectorN(Variant::VECTOR3I, p_force_wide, EDITOR_GET("interface/inspector/horizontal_vector_types_editing")) {}
EditorPropertyVector4::EditorPropertyVector4(bool p_force_wide) :
		EditorPropertyVectorN(Variant::VECTOR4, p_force_wide, EDITOR_GET("interface/inspector/horizontal_vector_types_editing")) {}
EditorPropertyVector4i::EditorPropertyVector4i(bool p_force_wide) :
		EditorPropertyVectorN(Variant::VECTOR4I, p_force_wide, EDITOR_GET("interface/inspector/horizontal_vector_types_editing")) {}