LINUX.ORG.RU

Исходный код стандартной библиотеки языка C

 ,


0

3

Добрый день всем. Хотелось бы узнать, где можно найти исходный код стандартной библиотеки языка C. В основном хочу понять, как работают тригонометрические функции и функция извлечения квадратного корня. Какие из операций более требовательны к ресурсам, какие - нет. Используют ли они какие-то таблицы готовых значений или как-то на лету вычисляют.

В основном хочу понять, как работают тригонометрические функции и функция извлечения квадратного корня. Какие из операций более требовательны к ресурсам, какие - нет. Используют ли они какие-то таблицы готовых значений или как-то на лету вычисляют.

Корнями и тригонометрией сейчас процессоры занимаются, это надо в мануалах интела и амд смотреть.

anonymous
()

Когда то гуглил какие-то варианты из какой-то bsd. Доставили функции для работы со строками, просто шизотерика. Я ими свой недо-компилятор тестил.

Deleted
()

У нее несколько реализаций. Среди самых известных:

glibc, eglibc, uclibc, dietlibc...

Плюс есть проприентарные и велосипедные, в которых можно встретить любые реализации.

German_1984 ★★
()
Ответ на: комментарий от anonymous

а ещё «весь мир - PC под виндой», да.

anonymous
()

хочу понять, как работают тригонометрические функции и функция извлечения квадратного корня

Никакие таблицы не используются и в общем виде это обычный x87, вставляемый компилятором без обращения к каким-либо библиотекам:

fld [var]
fsin | fcos | fsqrt | ...
fstp [var]
IIRC в libc задаётся лишь режим округления (roundtruncate to nearest int)

frame ★★★
()
Последнее исправление: frame (всего исправлений: 1)

В основном хочу понять, как работают тригонометрические функции и функция извлечения квадратного корня.

глибцешные не осилишь. https://github.com/jeremybarnes/cephes/

TrueTsar1C
()
Ответ на: комментарий от anonymous

тригонометрией сейчас процессоры занимаются, это надо в мануалах интела и амд смотреть.

Ниужели экспертов завезли. Это в какой вселенной они ими занимаются? В параллельной?

TrueTsar1C
()
Ответ на: комментарий от frame

Никакие таблицы не используются и в общем виде это обычный x87

Сколько же открытий чудных нам завозят эксперты. На х87, который протух и сдох 10лет назад. Как там в криокамере - норм?

вставляемый компилятором без обращения к каким-либо библиотекам:

Естественно, ведь эксперт не может ошибаться.

TrueTsar1C
()
Ответ на: комментарий от German_1984

glibc, eglibc

Это одно и то же. Это как назвать патченный curl из debian и centos двумя разными программами. Алсо «EGLIBC is no longer maintained or developed».

anonymous
()
double
__ieee754_exp10 (double arg)
{
  if (__finite (arg) && arg < DBL_MIN_10_EXP - DBL_DIG - 10)
    return DBL_MIN * DBL_MIN;
  else
    /* This is a very stupid and inprecise implementation.  It'll get
       replaced sometime (soon?).  */
    return __ieee754_exp (M_LN10 * arg);
}
strong_alias (__ieee754_exp10, __exp10_finite)
anonymous
()
Ответ на: комментарий от anonymous

glibc, eglibc

Это одно и то же.

Вопрос формулировки. Но раз в дистрибутиве есть два разных пакета, я все-таки склонен считать их разными :)

German_1984 ★★
()
Ответ на: комментарий от backburner

Не, ну ты реально настолько крякнутый, либо притворяешься? Судя по всем, ты наверное просто так постишь херню. Ну вот смотри, ты запостил http://stackoverflow.com/questions/2284860/how-does-c-compute-sin-and-other-m..., идём по ссылки и видим:

One directory includes an implementation in C, contributed by IBM. Since October 2011, this is the code that actually runs when you call sin() on a typical x86-64 Linux system. It is apparently faster than the fsin assembly instruction. Source code: sysdeps/ieee754/dbl-64/s_sin.c, look for __sin (double x).
It is a complex question. Intel-like CPU of the x86 family have a hardware implementation of the sin() function, but it is part of the x87 FPU and not used anymore in 64-bit mode (where SSE2 registers are used instead). In that mode, a software implementation is used.

https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/ieee754/dbl-64/s_sin...

Все в машину - пацан разоблачает.

Почему вы все, срыватели покровов, такие тупые, а?

TrueTsar1C
()

и функция извлечения квадратного корня

Некоторое время назад написал реализацию извлечения целочисленного корня (32 b), которая быстрее процессорной дробной реализации (fsqrt). Если интересно - скажи.

sambist ★★
()
Последнее исправление: sambist (всего исправлений: 1)
Ответ на: комментарий от TrueTsar1C

На х87, который протух и сдох 10лет назад.

То-то я смотрю, что fsqrt (с 80-битной точностью - где SIMD-аналог?) на хасвеллах аж за ~20 тактов выполняется

Естественно, ведь эксперт не может ошибаться

Ну не льсти себе

frame ★★★
()
Ответ на: комментарий от frame

То-то я смотрю

На что конкретно?

что fsqrt

Как же ты слился-то на один fsqrt, где разоблачения про тригонометрию?

с 80-битной точностью - где SIMD-аналог?

Т.е. во всех остальных случаях ты обосрался, я так понимаю? Вернее обосрался-то во всех, а этот вплыл только сейчас.

с 80-битной точностью - где SIMD-аналог?

А ну да, серанул по полной, но зато вспомнил про нестандартный екстеншн, причём которого нет в с89. Вай, вай.

на хасвеллах аж за ~20 тактов выполняется

Давай, расскажи мне про такты и про хасвелл, как можно больше. Я жажаду рассказов экспертов.

Ну не льсти себе

Чем больше таких экспертов как ты, тем меньше мне надо это делать. Молодец.

TrueTsar1C
()
Ответ на: комментарий от anonymous

О как, уже на гпу. И либц на гпу и сишка на гпу.

Почему один обосрался и начал кукарекать про левую фигню - гпу ему, второй обосрался - начал кукарекать про лонгдабл. Это так мило, но так глупо.

TrueTsar1C
()

Если никто ещё не назвал musl, то это сделаю я.

Deleted
()
Ответ на: комментарий от backburner

Ты лишь взбрякнул в своей обычной манере.

В своей манере я брякнул - в своей манере я прав. Всё остальное, включая твои отмазоны, меня не интересует.

А то, что ты запостил - ну я рад, что ты кинул первую ссылку из гугла - скилл скилла, он запостил видите-ли.

TrueTsar1C
()
Ответ на: комментарий от TrueTsar1C

КО-КО-КО
КО-КО-КО

пейте дети молоко

один fsqrt, где разоблачения про тригонометрию?

в общем виде это именно x87, т.к. в SSE* трансцендентных функций нет

естандартный екстеншн, причём которого нет в с89

монопенисуально к стандартам, т.к. даже без long double у нас все промежуточные значения вычислений в st-регистрах 80-битные, если явно не задана более низкая точность - что автоматом увеличит скорость

Давай, расскажи мне про такты и про хасвелл, как можно больше. Я жажаду рассказов экспертов.

ну тогда тебе прийдется учить английский: http://agner.org/optimize/

Чем больше таких экспертов как ты, тем меньше мне надо это делать. Молодец.

ЧСВ +20 этому господину от нашего столика! )

frame ★★★
()
Ответ на: комментарий от frame

в общем виде это именно x87, т.к. в SSE* трансцендентных функций нет

Квадратный корент — не трансцендентная функция.

Waterlaz ★★★★★
()
Ответ на: комментарий от beastie

Таблицы? Где-то, наверняка, и таблицы используют, но обычно полиномом приближают.

Waterlaz ★★★★★
()
Ответ на: комментарий от beastie

В мире GNU/80386 может быть и x87, но в других местах всё же таблицы (оно должно быть портабельным).

низкая производительность в угоду портабельности ценится, наверное, только за пределами мира x86

frame ★★★
()
Ответ на: комментарий от frame

низкая производительность в угоду портабельности ценится, наверное, только за пределами мира x86

Да это же очередной авторитетной мнение ламерка обосравшегося, ну прям всё лезет и лезет.

TrueTsar1C
()
Ответ на: комментарий от frame

Имелись ввиду sincos, а кукарекалось про корень почему-то, да? Иди расскажи про такты sincos.

TrueTsar1C
()
Ответ на: комментарий от backburner

Так вот именно, ничего особенного. А ты разосрался как будто теорему Ферма решил.

Не я разосрался, а обоссанцы разосрались. Я изначально лишь поправил высер некомпетентных ламерков, но ламерки же не хочет быть людьми, а хотят жрать говно. Зачем мне отказывать им в такой возможности невежественной балаболке?

Пусть пацаны видят своих героев, авось что-то в мире будет спасено от кривых лап и 2-х извилин этих ламерков и они уже ничего не родитят в этот мир. Осознаеют мб и пойдут сортиры мыть, раз ни способностей ни знаний нет, а кукарекать есть желание такое, буд-то эксперты мирового масштаба.

TrueTsar1C
()

см. исходники glibc, newlib, musl, dietlibc и прочих. обрати там внимание на то, как оно инициализируется (часть рантайма, которая запускается до запуска main в программе). также сравни с реализацией этой части рантайма в С++ : libstdc++, и аналогичное из clang-а.

anonymous
()

Спасибо всем!

P.S.Касательно срущих друг на друга в постах : интересно в 70-е годы сидя в библиотеке люди также спорили или это новый виток культуры интернетов?

Nerevarino
() автор топика
Ответ на: комментарий от Nerevarino

Ни то, ни другое, это вопрос личной культуры конкретного человека.

До Царя на ЛОРе был Луговской, правда, у того уровень всё же несколько другой был...

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Я этого чудика сразу вычислил по манере гадить и комментировать чуть ли не отдельные слова, но в этом и суть противодействия: использовать его как усилитель трафика, заставляя всё интенсивнее испражняться аж до истощения 8)

frame ★★★
()
Ответ на: комментарий от frame

А, т.е. пока меня не было ты настучал, клянча на коленях, и весь твой позор благополучно выпилили, но при этом ты нихрен не понял и делаешь вид, что ты не обделался? Это так полоровски. Да ещё и на меня что-то гонишь.

TrueTsar1C
()
Ответ на: комментарий от hobbit

До Царя на ЛОРе был Луговской, правда, у того уровень всё же несколько другой был...

Все так говорят, как будто он куда-то уходил.

anonymous
()
Ответ на: комментарий от frame

Предметно ты обделался инстантно. О чем можно говорить предметно с нулёвым балаболом?

а настучал я ещё на твой первый пост

Естественно, а что ещё балаболке надо - обделался и позвал мамочку.

TrueTsar1C
()
Ответ на: комментарий от frame

откроем тебе секрет. от тебя тут толку раз в 200 меньше чем от царя.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.