sqrt () Funktion arbeitet nicht mit variablen Argumenten

7

Ich weiß nicht, ob ich etwas Offensichtliches verpasse, aber es scheint, dass ich Quadratwurzeln einer Variablen in C nicht berechnen kann; Die Funktion sqrt () scheint nur auf Konstanten zu funktionieren. Das ist mein Code:

%Vor%

Wenn ich dieses Programm ausführe, erhalte ich den folgenden Fehler:

%Vor%

Wenn ich jedoch das Argument in sqrt () durch eine Konstante wie 2.0 (zB b = sqrt(2.0) ) ersetze, funktioniert es gut. Ist sqrt () nicht mit Variablen oder etwas zu arbeiten?

Danke für die Hilfe

    
Eddy 20.08.2010, 18:05
quelle

8 Antworten

18

Sie müssen eine Verknüpfung mit der Math-Bibliothek herstellen (verwenden Sie ein '-lm' in der Befehlszeile). Im konstanten Fall ist der Compiler wahrscheinlich intelligent und setzt sqrt (2.0) voraus (der kompilierte Code ist also im Wesentlichen 'b = 1.414 ...;')

    
Gretchen 20.08.2010, 18:08
quelle
2

Wahrscheinlich müssen Sie -lm beim Kompilieren hinzufügen. Wenn Sie die Quadratwurzel einer Konstanten verwenden, optimiert der Compiler den Code, indem er die Quadratwurzel während der Kompilierung verwendet, sodass% code% überhaupt nicht verwendet wird.

    
Jerry Coffin 20.08.2010 18:08
quelle
2

Verwenden Sie den Befehl gcc -Wall -o "test2" "test2.c" -lm , der dies wahrscheinlich beheben wird.

Dies umfasst die mathematische Bibliothek zusätzlich zur standardmäßigen C-Laufzeitbibliothek. Auf den meisten Systemen ist die Math-Bibliothek historisch eine separate Entität, die explizit angefordert werden muss.

    
RBerteig 20.08.2010 18:08
quelle
2

Im Falle von gcc müssen Sie die Bibliothek verknüpfen.

gcc filename.c -lm.

Im Fall von g ++ ist es jedoch nicht nötig, die Bibliothek zu verknüpfen, damit dies funktioniert:

g ++ Dateiname.c -o Dateiname Sobald die Kompilierung erfolgreich ist.

Geben Sie einfach ./filename in G ++ ein. und geben Sie ./a.out in Gcc ein.

    
user3105927 03.06.2014 05:51
quelle
1

Kompilieren mit:

%Vor%

Sie müssen eine Verknüpfung mit der Mathematikbibliothek herstellen.

    
Stephen Canon 20.08.2010 18:09
quelle
1

enthält eine Math-Bibliothek mit dem Operator ""

%Vor%

Kompilieren Sie das Programm mit -lm Option für die Math-Bibliothek Nehmen wir an, unser Programmname ist test.c und wir kompilieren wie folgt

%Vor%     
hirday 13.04.2012 13:45
quelle
1

gcc verbindet die Standardbibliotheken nicht standardmäßig. Sie müssen dies also nur tun, wenn Sie über gcc kompilieren:

gcc dateiname.c -lm .

Im Fall von g ++ ist es jedoch nicht nötig, die Bibliothek zu verknüpfen, damit dies funktioniert:

g ++ Dateiname.c -o Dateiname

    
Abhishek Kaushik 30.05.2014 11:32
quelle
0

Das funktioniert gut für mich. Ich denke, es gibt ein Problem mit Ihrer Mathebibliothek. Versuchen Sie es erneut zu verknüpfen und zu sehen. Andere weise Code ist vollkommen perfekt.

    
EnthuDeveloper 21.10.2011 07:02
quelle

Tags und Links