Je sais que c'est probablement une question très simple, mais comment ferais-je faire quelque chose comme
n 2 sup> dans une langue de programmation? P>
est-ce n * n? Ou y a-t-il un autre moyen? P>
5 Réponses :
Il échouera également quand il y a un cas de débordement: P> n * n code> fonctionnera presque toujours - les cas de couple où il ne fonctionnera pas sont dans les langues de préfixes (Lisp, schéma et co.) ou postfix Langues (en avant, facteur, BC , DC); Mais évidemment, vous pouvez simplement écrire (* nn) code> ou nn * code> respectivement. #include <limits.h>
#include <stdio.h>
int main()
{
volatile int x = INT_MAX;
printf("INT_MAX squared: %d\n", x * x);
return 0;
}
ou un ^ code> ou un opérateur code> ** code> qui vous permet de faire x = n ^ 2 code> ou x = n ** 2 Code>, mais c'est la même chose que la fonction pow code>.
@FrustratedwithFormsDesigner: ^ code> est utilisé pour le bitwise xor code> dans la plupart des langages de programmation afin que cela soit utilisé avec soin.
@Felix: bon point, je suppose que cela montre à quelle fréquence j'utilise xor code>. ;-)
@FrustratedwithFormsDesigner: :-D
"Presque" fonctionne toujours? S'il vous plaît citer un exemple où il ne doit pas ou supprimer le qualificatif inutile.
@duffymo lisp / schéma le voudra en notation de préfixe: (* n n). J'ai l'impression que la plupart des langues de montage se plainent aussi :-)
Pour les langues prenant en charge l'opérateur de l'exponentiation ( Sinon, vous pouvez utiliser une bibliothèque de mathématiques pour appeler une fonction, telle que n * n code> est le moyen le plus simple. p>
** code> dans cet exemple), vous pouvez également faire n ** 2 code> p>
POW (n, 2) code> mais qui est probablement surchargé pour passer simplement un numéro de squalage. P>
Il existe de nombreuses langues de programmation, chacune avec leur propre façon d'exprimer des opérations mathématiques.
Certains ordinaires seront: p> Si vous spécifiez une langue spécifique, Nous pouvons vous donner plus de conseils. P> P>
Mais vous devriez ajouter que dans La plupart des langages de programmation B>, ^ code> est utilisé pour Bitwise xor code>.
si pour des entiers positifs, vous pouvez utiliser la récursive: p> Utilisation du décalage de bits (multiplication égyptienne antique): p> n code> est un entier: Pre> xxx pré> int x = 10;
_asm_ __volatile__("imul %%eax,%%eax"
:"=a"(x)
:"a"(x)
);
printf("x*x=%d\n", x);
... Parce que parfois, il n'y a pas une bibliothèque qui l'a déjà fait. ;)
Hmm, beaucoup de votes en bas. Je ne comprends pas. L'utilisateur n'a pas demandé de manière optimale mais pour une autre manière ... :)
Franchement, je suis plutôt surpris (et oui, un peu déçu aussi, je suppose) que cela ne se soit pas transformé en un défi de golf des calculatrices d'exposition les plus convoluées et obscurées.
@Frustrated Il ne devient guère plus de golf que n * n code> (même J prend 3 caractères *: n code>)
@Frustrated Voici un peu de shift.
Utilisez toujours la multiplication de la langue, à moins que la langue ait une fonction explicite Je vois un une quantité énorme de code C / C ++ dans lequel les développeurs ont écrit: p> vraisemblablement pour éviter de taper cette expression compliquée deux fois ou parce qu'ils pensent que cela ralentit en quelque sorte leur code d'utilisation temporaire variable. Ce ne sera pas. Les compilateurs sont très, très bien pour optimiser ce genre de chose. Au lieu de cela, écrivez: p> à résumer: utilisez la multiplication. Il sera toujours au moins aussi rapide et au moins aussi précis que tout ce que vous pouvez faire [2]. P> 1) Les compilateurs récents sur les plates-formes grand public peuvent optimiser 2) pour les types de base. Si vous souhaitez vraiment y entrer, si la multiplication doit être implémentée dans des logiciels pour le type que vous collaborez, il existe des moyens de faire une opération de quadrillage plus rapide que la multiplication. Vous ne vous retrouverez presque jamais dans une situation où cela compte, cependant. P> p> carré code>. Évitez spécifiquement d'utiliser la fonction pow code> fourni par la plupart des bibliothèques de mathématiques. La multiplication (sauf dans les circonstances les plus scandaleuses) toujours plus rapides et - si votre plate-forme est conforme à la spécification IEEE-754, laquelle la plupart des plates-formes se produisent - fournira un résultat correctement arrondi. Dans de nombreuses langues, il n'y a pas de norme régissant la précision de la fonction pow code>. Il donnera généralement un résultat de haute qualité à un cas aussi simple (de nombreuses implémentations de la bibliothèque seront spéciales de sauter de manière à sauver les programmeurs d'eux-mêmes), mais vous ne voulez pas dépendre de cela [1]. pow (x, 2) Code> dans x * x code> lorsque la sémantique de la langue le permet. Toutefois, tous les compilateurs ne le font pas dans tous les paramètres d'optimisation, qui est une recette pour les erreurs d'arrondi difficiles à déboguer. Mieux vaut ne pas en dépendre. P>
N * N est le plus simple, le plus rapide et probablement aussi le plus facile à comprendre.