Salut les gars, pour ma classe, je dois créer une racine carrée numérique, mais ça ne marche pas !! HELLPP!
Le défi:
Write a function or program that will "make a number square root".
Remarque: Ceci est le code trolling. Donnez une réponse "utile" pour guider ce nouveau programmateur vers la réussite de sa programmation! Sois créatif!
Réponses:
Java
Wow, c'est un problème compliqué. Je n'ai jamais fait de racine carrée auparavant. J'ai pris des racines carrées, mais je n'en ai pas fait. N'oubliez pas de rendre votre code joli pour un crédit supplémentaire dans vos cours. Voici le code qui fait une racine carrée d'un nombre entré:
Trolls:
System.out.print
s n'imprime pasjava.lang.System.out.print
. Ils impriment à une classe intérieure. Les deux premiers (qui sont supposés imprimer des chaînes) ne font rien; le deuxième:100
) ?:0
. Échec par boucle infinie lorsque l'entrée est négative pour la même raison qu'il échoue par boucle infinie lorsque l'entrée est0
.la source
JFrame.DO_NOTHING_ON_CLOSE
setAlwaysOnTop(true)
également.C ++
Eh bien, si vous n'avez pas de meilleur itinéraire, il y a toujours la solution de force brute:
Cela parcourt toutes les valeurs possibles de a
double
(en yunion
ajoutant unlong long
de la même taille en bits, car il n’existe aucun moyen efficace de les parcourir en utilisant des doublons comme doubles réels) jusqu’à ce qu’il en trouve une dont le carré estn
.la source
double
et along long
est la chose la plus terrifiante que j'ai jamais vue.union
comportement est indéfini et itérer à travers des doublons est possible avec la fonctionstd::nextafter
std::nextafter
existait avant que vous ne m'en parliez, alors oui, c'était voulu.double
valeurs ne peuvent pas être produites en multipliantx*x
oùx
estdouble
, aussi. Donc, la recherche ne réussit pas parfois (la plupart du temps?), Donnant NaN au lieu d'un résultat plus correct.Python 3
Ce code simple donnera une réponse exacte :
la source
En Python 3, vous pouvez effectuer les opérations suivantes:
la source
Corriger cette réponse ,
C'est tout simplement faux. Tout le monde sait que le plus rapide est l'ASM.
Pure x86_64 ASM!
Contrairement aux autres réponses retardées, celle-ci a une complexité de O (1)!
Et contrairement à d’autres réponses, c’est précis à 101%,
sqrt(0.5)
c’est très utile0.70710678118655
!la source
PCMPEQQ
ne vous apparaissent plus comme des "ordures illisibles magiques produites par un compilateur"Python
Si cela est autorisé dans votre classe, vous pouvez utiliser ici une bibliothèque de mathématiques complexe comme aide, installez-la en exécutant la commande suivante:
Ensuite, il vous suffira d'exécuter quelque chose comme ce script python:
(Assurez-vous de l'exécuter avec les privilèges d'administrateur)
la source
root
passer pour un administrateur ( sous Unixland).C
Évidemment c'est la meilleure façon. C'est aussi rapide que vous pouvez l'imaginer en regardant le code. Utiliser C, car C est le plus rapide, et ce problème nécessite une solution rapide. J'ai testé cela pour mes numéros préférés, comme 7, 13 et 42, et cela semble fonctionner.
la source
results[number];
?C
Des tours et de la magie le feront fonctionner.
la source
Python 3
Vous faites tout faux. Tout le monde peut voir que la racine carrée de 20 n’est pas 4.47213595499958, ni même √20. Cette solution déplace la tâche difficile du calcul de la racine carrée vers le module prévu à cet effet.
L'un de ces modules est sympy, qui fournit des mathématiques à racines carrées. Contrairement à d'autres solutions ici, il fait tout correctement. Il suppose même que sqrt (-1) est I - aucune des solutions ici ne peut résoudre ce problème.
Et voici le code modulaire, à quoi ressemblent les bons programmes. Les fonctions doivent être aussi petites que possible, sinon, vous écrivez des programmes terribles. En outre, les programmes devraient avoir beaucoup de commentaires.
Et voici un exemple de ce programme qui fonctionne.
la source
print_format_prompt_with_thing_to_specify_get_default_prompt_format_to_getattr_get_sys_name_from_get_stdout_name_and_print_square_root_of_read_from_stdin_and_print_get_string_from_get_newline_to_getattr_get_sys_name_from_get_stdout_name
.JavaScript
Malheureusement, JavaScript ne prend pas en charge le symbole de racine carrée pour les noms de fonction. Au lieu de cela, nous pouvons utiliser un autre caractère de l’alphabet Unicode pour représenter une fonction racine carrée.
Dans cet exemple, je vais utiliser
ᕂ
.Une fois que nous avons un symbole valide à utiliser, nous pouvons utiliser l'objet Math pour générer une fonction racine carrée.
C'est simple! :)
la source
Julia
Évidemment, la meilleure façon de le faire consiste à utiliser la racine carrée de Taylor Series:
Cela produit en fait des valeurs très précises:
Mais bien sûr, c'est comme une approximation (et aussi une série convergente) inutile pour des valeurs proches de 1:
la source
a^2
(n fois) et multiplie para
(n fois) la réponse (sqrt(x)~a^n*sqroot(x/a^2n)
) x-> 0 (si a> 0) pas à 1 (donnant de grosses erreurs). Aussi, si x / a ^ 2n ~ 1 les chiffresa!=x
etn
changera pour un arbitrairex
pour obtenir la présence recherchée (rendant fastidieux et fastidieux de les trouver).Latex
La solution à ce problème est assez complexe et complexe, prenez donc votre café. Le problème est que, selon le type de numéro que vous souhaitez, la racine carrée du code change de manière significative. Je vais vous montrer le problème. Disons que
9
c'est votre numéro. Le code ressemblerait alors à ceci:Maintenant, disons que
1234321
c'est votre numéro, regardez le code:Dernier point mais non le moindre, disons que votre numéro est
0
.Un bon moyen de résoudre ce problème est d’écrire un programme en
Ook!
ouPiet
qui veut votre numéro et le sortLaTeX-sqrt-code
. Voici un exemple très simpleOok!
car il ne peut lire qu'un seul octet et ne vérifie pas si cet octet est un nombre légal ou non, mais je pense que vous allez aller droit au but.Idem pour
Piet
:Ce serait le moyen le plus efficace. Je suggérerais également d'utiliser
Piet
comme chaque fois une belle œuvre d'art, pour que les choses ne deviennent pas ennuyeuses.la source
Haskell
J'ai arrêté de faire confiance aux ordinateurs lorsque j'ai entendu parler des erreurs en virgule flottante. Je veux dire sérieusement, si même Google ne peut pas les contrôler , alors qui le peut?
Donc, notre meilleur pari est de trouver une solution ne comportant que des entiers. Heureusement, c'est facile, car nous pouvons simplement vérifier tous les nombres, car chaque intervalle [1..n] en contient seulement une quantité finie, et non pas comme les vrais merle-1. Voici un exemple d'implémentation dans Haskell:
Fonctionne comme un charme, découvrez-le:
La précision devrait suffire pour la plupart des applications.
la source
double
s et DDG utilisetriple
s.Java
Le moyen le plus précis de le faire est d’itérer. Tout d’abord, bouclez par
integer
s jusqu’à ce que vous dépassiez la cible, puis passez àdouble
s. Cette méthode a l’avantage d’être exacte , contrairement à d’autres méthodes «d’estimation» que vous pourriez voir. Vous sacrifiez un peu de vitesse, mais pour la plupart des applications, c'est exactement ce dont vous avez besoin.Vous pouvez modifier cette réponse en fonction de votre précision, mais cela devrait fonctionner au moins jusqu'au milliardième:
la source
0.000000001
est qu'il est sujet aux erreurs d'arrondi. J'ai créé une solution plus précise en C ++.Math.nextUp(root)
au lieu de+0.000000001
? Cela prendrait beaucoup plus de temps ... et il est assuré de réussir.Double
et j'étais surpris de ne pas pouvoir la trouver. Je n'ai pas pensé à regarderMath
, mais ça marche plutôt bien. Je ne l'ai pas encore "échoué".Javascript
Ces constantes magiques peuvent être utilisées pour calculer la racine carrée d'un nombre en utilisant l'alphabet:
Tests:
Cela semble bien fonctionner. Je me demande s'il y a un moyen plus court?
la source
JavaScript
Problème très difficile!
Il n'y a pas de fonction intégrée pour cela en JavaScript ... Cela
ressemble à un travail pour le solveur Newton-Raphson.
Maintenant vous pouvez utiliser
Math.sqrt
la source
JavaScript / ActionScript
Il n’existe aucun moyen de calculer directement une racine carrée en ActionScript ou en JavaScript. Toutefois, il existe une solution de contournement. Vous pouvez obtenir la racine carrée d'un nombre en l'élevant à la
1/2
puissance.Voici à quoi cela ressemblerait dans JavaScript et ActionScript 2:
Et bien que la fonction fonctionne aussi bien dans ActionScript 3, je vous recommanderais d'utiliser des variables typées et de renvoyer des valeurs pour plus de clarté et de fiabilité:
Le troll:
la source
1/2 == 0
.Python 2.7
Explication
Citant
Wikipedia - racine carrée
En mathématiques, une racine carrée d'un nombre a est un nombre y tel que y 2 = a
En d'autres termes, chaque nombre est une racine carrée d'un autre nombre.
Remarque
Pour moi, cette question ressemble à un casse-tête bien connu. Comment raccourcir une ligne sans la frotter ni la couper
la source
PHP (et autres):
Puisque la manière dont la question a été décrite ne signifiait pas que nous devions la calculer, voici ma solution:
Il fournit un moyen de calculer avec précision la racine carrée dans plusieurs langues.
La liste des langues peut être élargie.
La valeur peut être envoyée via POST, GET, un cookie ou même être enregistrée dans la session.
Si vous ne fournissez que le nombre, cela devient confus et donne le résultat calculé, qui est valable pour (presque) CHAQUE langue!
la source
C
C’est mieux que toutes les 27 autres réponses car elles sont toutes inexactes. C'est vrai, ils ne donnent qu'une seule réponse quand il devrait y en avoir 2. Celui-ci n'essaye même pas de répondre si ça va être faux, il se contente d'abandonner et d'arrondir.
Trolling de code:
for
abus de boucle#define
utiliser pouraugmenter lalisibilité√1024
retourne3√1024 = ∓32
, ce qui est tout simplement faux)la source
#define the number
... agréable! J'ai aimé votre raisonnement sur la condition d'affichage du message d'utilisation, en particulier.C ++
basé sur http://en.wikipedia.org/wiki/Fast_inverse_square_root et la réponse de @ snack.
Sauf qu'au lieu de boulonner sur un moyen de convertir le x ^ (- 0.5) en x ^ (0.5), j'ai modifié l'algorithme pour le faire directement.
ALGORITHME
Transforme un nombre à virgule flottante (ici un double) en un entier (long ici long.)
Les premiers bits du nombre à virgule flottante sont l'exposant: le nombre est stocké sous le nom 2 ^ AAA * 1.BBBBBBB. Alors faites un rightshift et cet exposant est réduit de moitié.
Dans la racine carrée inverse originale , ce nombre a été soustrait d’une constante pour donner la réciproque. Je viens de l'ajouter à la constante, parce que je veux la racine carrée directement. La valeur de la constante est choisie pour donner une réponse qui est la meilleure approximation de la valeur désirée.
Remettez le nombre en virgule flottante.
Facultativement, une ou deux itérations de la méthode de Newton peuvent être utilisées pour améliorer le résultat, mais je ne m'en suis pas soucié, car je voulais voir à quel point je pouvais m'en passer.
Les constantes utilisées semblent très mystérieuses, mais au-delà des premiers chiffres, les valeurs ne sont pas critiques. J'ai trouvé la constante par essais et erreurs. Je me suis arrêté dès que j'ai eu une valeur parfois sous-estimée et parfois surestimée.
Résultats
Le transtypage n’est nécessaire que parce que C ne vous autorise pas à effectuer des opérations de décalage de bits sur un float. Par conséquent, les seules opérations réelles sont le décalage de bits et l’addition. Je n'ai pas utilisé une seule itération de la méthode de Newton pour améliorer le résultat. La précision est donc remarquable. L'enseignant du PO sera impressionné par la rapidité de la méthode, qui (franchement) est suffisamment précise pour de nombreux objectifs!
la source
10
* 1.000
, sqrt (4) = 2 ^01
* 1.000
= 2, sqrt (2) = 2 ^00
* 1.100
= 1,5. Ainsi, le1
bit décalé de l'exposant donne une mantisse de 1,5, ce qui n'est pas très éloigné de la valeur réelle de sqrt (2), qui est d'environ 1,4. Mais vous ne savez pas comment cela donne systématiquement des réponses avec une précision meilleure que 3%.E
Remarque: cela ne fonctionne que sur mon ordinateur, car le matériel sous-jacent ne stocke pas les nombres en binaire, mais en base e, de sorte que ce qui apparaît comme
10
représentant e,100
représente e e , etc. De cette manière, ce que vous pourriez appeler sur une machine binaire un décalage binaire vers la gauche effectue x => e x , et ce que vous pourriez sur une machine binaire appeler un décalage binaire vers la droite effectue x => ln x. De toute évidence, il est difficile de représenter ses chiffres sous-jacents sur ce média Internet très limité et centré sur le binaire, mais je fais de mon mieux.La syntaxe de E est remarquablement similaire à celle de C / C ++, elle devrait donc être facile à comprendre pour la plupart des gens.
la source
n >> 1
n'est pas la même chose quelog(n)
.JavaScript / HTML / CSS
J'ai pensé à utiliser jQuery et les identifiants pour troll un peu plus, mais je préfère vanilla js.
Le résultat n'est pas parfaitement précis, mais ça marche!
la source
GeoGebra
Lisez la valeur de votre réponse à partir de l’axe des coordonnées.
Essayez-le en ligne ici (nécessite Java), ou profitez de quelques captures d'écran ci-dessous:
la source
100% pur bash (base entière)
Avec présentation ascii-art:
Cette racine carrée parfaite doit être obtenue en bash en utilisant la
source
commandeAncien (cette version pourrait être simplement collée dans n’importe quel terminal de console)
Travaillera comme:
Remarque: la racine est carrée !!
la source
Java
Merci à ggmx pour le code sur la génération de n chiffres de pi en java .
Je n'avais pas envie de mettre en œuvre les commentaires. Pour tester le changement de code
sqrtThis
etexpectedPercision
.Voici comment fonctionne le code. Premièrement, obtenir la racine sqrt pour integer est trivial, donc je n’avais pas l’impression de l’implémenter et j’utilisais javas intégré à sqrt fcn. Le reste du code est cependant 100% légitime.
L'idée de base,
Puisque pi est un nombre décimal long et infini de longueur infinie, toutes les séquences de nombres doivent y figurer.(lire éditer). Votre réponse est donc à l'intérieur de pi !! En tant que tel, nous pouvons simplement appliquer une recherche de regex sur pi cherchant votre réponse. Si nous ne parvenons pas à trouver une bonne réponse, nous doublerons la taille de pi sur laquelle nous cherchons!C'est vraiment facile, en fait, on pourrait dire que c'est aussi simple que pi :)
Il
n’a pas été prouvé que Edit Pi contenait toutes les suites de nombres finis qu’il contient. Le fait que pi soit infini et ne se répète pas n'est pas une preuve suffisante pour une déclaration telle que celle prouvée par Exelian. Cependant, beaucoup de mathématiciens pensent que pi contient chaque séquence de nombres finis.
la source
JQuery
celui-ci est le plus précis (bonus: fonctionne aussi pour les lettres!)
Voici un violon
la source
document.write
cela le corrige assez.C ++
Cela finira par vous donner une racine carrée.
J'ai corrigé le code pour mieux refléter la question. Merci pour vos suggestions ... le code est mis à jour.
la source
x+=1e-16
?DBL_EPSILON
.Python
Cette solution:
Becquet:
Code:
la source
C ++
Votre question ne compile pas parce que vous mettez un! à la fin. C ++ n'aime pas!
Voici la bonne question pour le compilateur:
Oh .. et le fichier make.
et 26317.def. Cela devrait déjà être présent dans votre compilateur
Oui, quelqu'un peut utiliser -E pour générer la réponse de prétraitement correcte, mais si vous connaissez -E, vous savez également comment procéder. : P En voici quelques-uns prétraités. Très mauvaise solution minimale, pas de chèque lié, pas d'invite. TIL que trigraph sont prétraités.
la source