Espressioni aritmetiche

Gli operatori aritmetici sono addizione (+), sottrazione (-), moltiplicazione (*), divisione (/), negazione (-) ed esponente (^). Possono essere applicati agli operandi di tipo Int, BigInto Double. Inoltre, per i tipi integrali (Int e BigInt), è disponibile un operatore che calcola il modulo (%).

Per gli operatori binari, il tipo di entrambi gli operandi deve corrispondere, ad eccezione dell'esponente; un esponente per un valore di tipo BigInt deve essere di tipo Int. Il tipo dell'intera espressione corrisponde al tipo dell'operando di sinistra. Per l'esponente di Int e BitInt, il comportamento non è definito se l'esponente è negativo o richiede più di 32 bit per rappresentare (ovvero se è maggiore di 2147483647).

Divisione e modulo per i valori di tipo Int e BigInt seguono il comportamento seguente per i numeri negativi:

A B A / B A % B
5 2 2 1
5 -2 -2 1
-5 2 -2 -1
-5 -2 2 -1

Vale a dire, a % b ha sempre lo stesso segno di ae b * (a / b) + a % b è sempre uguale a a.

Q# non supporta le conversioni automatiche tra tipi di dati aritmetici o altri tipi di dati. Questa è un'importanza particolarmente importante per il Result tipo di dati e semplifica la propagazione delle informazioni di runtime. Offre il vantaggio di evitare errori accidentali, ad esempio quelli correlati alla perdita di precisione.