Feuerbach
написал 1 июля 2005 года в 00:42 (801 просмотр)
Ведет себя
как мужчина; открыл 53 темы в форуме, оставил 447 комментариев на сайте.
feuerbach@localhost ~/c/math $ cat foo.c
#include
#include
short prime(unsigned n)
{
unsigned i,s;
if (!(n & 1)) return 0;
s = (int)sqrt(n);
for (i=1; (i << 1) + 1<=s;i++)
if (!(n % ((i << 1)+1))) return 0;
return 1;
}
int main(void)
{
printf("%d\n",prime(73));
}
feuerbach@localhost ~/c/math $ cc foo.c
/home/feuerbach/tmp/ccASJQyT.o(.text+0x35): In function `prime':
: undefined reference to `sqrt'
collect2: ld returned 1 exit status
feuerbach@localhost ~/c/math $ c++ foo.c
feuerbach@localhost ~/c/math $
То есть c++ она компилится (и линкуется), а cc — нет. Более того, если sqrt вызывается только из main(), то тоже все оки. В чем прикол?
gcc 3.4.1
Последние комментарии
-
OlegL, 17 декабря 2023 года в 15:00 →
Перекличка
21
-
REDkiy, 8 июня 2023 года в 9:09 →
Как «замокать» файл для юниттеста в Python?
2
-
fhunter, 29 ноября 2022 года в 2:09 →
Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
6
-
Иванн, 9 апреля 2022 года в 8:31 →
Ассоциация РАСПО провела первое учредительное собрание
1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 →
Логи catalina.out в TomCat 9 в формате JSON
1
DevOps as a Service from Palark
24/7 SRE & DevOps service to cover all your Kubernetes needs.

Благодарю. А все же, чем принципиально отличаются два случая (когда sqrt вызывается из main и из prime)?
в случае c++ libm притягивается автоматически, так как она используется в нескольких классах.
разницу в месте использования что-то уловить не могу ;)
ps: а sqrt там, на самом деле, лишнее.. :))
А как без него?..
вычитанием. вспомни курс математики школной, прогрессии там.. ;)
Так уж исторически сложилось, что математику я неплохо знаю, а вот с алгоритмами разными и умными я не дружу… Так как же все-таки квадратный корень извлекать вычитанием и прогрессиями?))
тьху ты блин.
ну, представь, что x(n)=n^2 — это у тебя n-ный член прогрессии (эмм.. точнее ряда).
тогда x(n+1)=(n+1)^2=n^2+2n+1=x(n)+2n+1
остальное додумаешь ;)
Гы, дошло %) Что-то в этом есть.