### 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.
linked->set_modulate(Color(1, 1, 1, linked->is_pressed() ? 1.0 : 0.5));
	bool non_zero = true;
	for (int i = 0; i < component_count; i++) {
		if (spin_sliders[i]->get_value() == 0) {
			non_zero = false;
			break;
		}
	}
	double *ratio_write = ratio.ptrw();
	for (int i = 0; i < ratio.size(); i++) {
		int base_slider_idx = i / (component_count - 1);
		int secondary_slider_idx = ((base_slider_idx + 1) + i % (component_count - 1)) % component_count;
		if (non_zero) {
			ratio_write[i] = spin_sliders[secondary_slider_idx]->get_value() / spin_sliders[base_slider_idx]->get_value();
		} else {
			ratio_write[i] = 1.0;
		}
	}
}
void EditorPropertyVectorN::_store_link(bool p_linked) {