fabs из math.h в Atmel Studio 6

Подскажите, знатоки!

Понадобилось недавно взять модуль от некоего выражения, в результате которого получается число с плавающей точкой. Подключил math.h, дабы заюзать оттуда fabs, но не тут-то было. При компиляции получил «Error 8: undefined reference to `fabs'».

В опциях линкера -lm сделал. При вычислении выражения, от которого берется модуль, используется sqrt — так оно работает, а fabs нет.

Я, конечно, по-быстрому накидал свою функцию, которая возвращает модуль, но в чём же загвоздка-то?
  • -3
  • 04 сентября 2012, 17:17
  • madmazy

Комментарии (13)

RSS свернуть / развернуть
Странно, попробовал avr-toolchain 3.4.0.1146 там fabs работает без проблем. Только собственно вызова функции там действительно нет. Есть вот, что:
andi	r25, 0x7F	; 127

Это есть обнуление старшего бита числа с плавающей точкой, в котором хранится знак.
0
должна фигня получиться. ведь отрицательные числа обычно представляются в дополнительном коде, т.е.

0111 1111 = 127
1000 0000 = -128 
1111 1111 = -1
подробней у вики. разве что на авр по каким-то волшебным причинам иначе?
0
Это у целых чисел дополнительный код, а у float — положительные и отрицательные числа отличаются только одним знаковым битом:
en.wikipedia.org/wiki/Single_precision
+1
Хм. У меня Atmel Studio 6 (Version: 6.0.1882 — )

Installed Packages: AVRGCC — 3.4.0.65
AVR Toolchain 8 Bit
Version: 3.4.0.663 — GCC 4.6.2

может, в этом дело…

а toolchain отдельно берется где-нибудь?
0
Да, на сайте атмела. Называется AVR Toolchain. Ссылки на него обычно есть со страницы загрузки студии.
0
  • avatar
  • Vga
  • 05 сентября 2012, 10:18
Ага, спасибо, нашел. Уже 3.4.1.1195 выпустили оказывается… Щас проверим.
0
Скачал новый тулчейн, поставил, но в студии почему-то показывается, что версия старая. Не подскажете, может он как-то хитро к ней подключается?
И да, на всякий случай — у меня две студии стоит одновременно — 4.19 и 6
0
Не превращай сообщество в форум! Этак каждый зарегистрировавшийся может по вопросу задать… Для вопросов есть личка, аська и т.д.
0
Пардон. Решил, что тут быстрее дождусь ответа.
0
Угу, водителям тоже вон быстрее во втором ряду и на пешеходных переходах парковаться.
0
Я извиняюсь что задам вопрос здесь.
Уважаемый,madmazy , вы нашли решение проблемы?
Я наткнулся на подобную, борюсь уже третий день никак не могу решение найти…
0
Увы мне, так и не разобрался, не до того. Классическое «do it now, fix later».
пока работает в виде следующего говнокода:

float absf (float inval) //модуль числа с плавающей точкой
{
if (inval<0) return (-1*inval);
else return(inval);
}

если вдруг решите проблему, напишите, пожалуйста.
0
если кому-то понадобится — проблема решается скачиванием последнего билда студии с офф.сайта, у меня это на данный момент Atmel Studio 6 (Version 6.0.1996 — Service Pack 2)

Спасибо michaeltex

forum.easyelectronics.ru/viewtopic.php?f=4&t=11738&p=233885#p233885
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.