реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Вывод float в arm-none-eabi-gcc для stmf4
demiurg_spb
сообщение Oct 24 2016, 11:23
Сообщение #16


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(zemlemer @ Oct 24 2016, 13:53) *
Смыслов несколько.
У меня был вопрос не к вашей задаче. А вообще к libc. Вроде либа должна быть стандартная и удобная - она таковой и является, пока не задумаешься об оптимизации...
Хочешь printf'нут float, а он к double сначала приводится - обидно досадно и не понятно зачем так сделано, что %f - это double и НЕТ стандартного способа вывести float в чистом виде без приведения типа!
Цитата(scifi @ Oct 24 2016, 14:19) *
Между прочим, если функция имеет переменное число аргументов (как sprintf), аргументы типа float приводятся к типу double перед вызовом функции.
Это всем известно, но не понятно - зачем)))


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 24 2016, 11:26
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (scifi @ Oct 24 2016, 14:15) *
если функция имеет переменное число аргументов (как sprintf), аргументы типа float приводятся к типу double перед вызовом функции.
А все, что меньше int - к int. При том зачем-то в последних стандартах в inttypes.h добавили префиксы спецификаторов форматной строки h и hh "для принудительного приведения к short и char"


QUOTE (demiurg_spb @ Oct 24 2016, 14:23) *
Это всем известно, но не понятно - зачем)))
Видимо неявное приведение позволяет написать вывод только одного типа (double) и в программах разумного размера суммарный размер всех кодов приведения типа будет меньше, чем размер дополнительной отдельной ветки кода для вывода float.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 24 2016, 11:29
Сообщение #18


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



я hu и hhu использую по мере необходимости. На AVR вроде как был профит от этого.

Цитата(Сергей Борщ @ Oct 24 2016, 14:26) *
Видимо неявное приведение позволяет написать вывод только одного типа (double) и в программах разумного размера суммарный размер всех кодов приведения типа будет меньше, чем размер дополнительной отдельной ветки кода для вывода float.
Ну а если наоборот - в прошивке ни одного double нет, лишь одни float))) (типично для кортекса и около того)


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 24 2016, 11:38
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Сергей Борщ @ Oct 24 2016, 14:26) *
При том зачем-то в последних стандартах в inttypes.h добавили префиксы спецификаторов форматной строки h и hh "для принудительного приведения к short и char"

Можно предположить, что это сделано для симметрии с scanf, а там это нужная фича.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 24 2016, 12:48
Сообщение #20


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (demiurg_spb @ Oct 24 2016, 14:29) *
я hu и hhu использую по мере необходимости. На AVR вроде как был профит от этого.
Откуда он может взяться? Переменная приводится к (unsigned) int принудительно, на это мы повлиять не можем. Дальше работа с ней идет как с int. значение ее от приведения поменяться не могло. В чем смысл дополнительного принудительного обратного приведения внутри printf и какой выигрыш от этого можно плучить? Могу предположить, что если мы хотим вывести только младший байт или слово от int, тогда можно не накладывать маску перед передачей параметра в printf, но это настолько редкий случай, что городить ради этого поддержку дополнительных флагов... Не могу пока понять такой логики.

QUOTE (demiurg_spb @ Oct 24 2016, 14:29) *
Ну а если наоборот - в прошивке ни одного double нет, лишь одни float))) (типично для кортекса и около того)
Нет в жизни совершенства sad.gif

QUOTE (scifi @ Oct 24 2016, 14:38) *
Можно предположить, что это сделано для симметрии с scanf, а там это нужная фича.
Правдоподобно. Там значение передается по указателю, приведений не происходит.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 17:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.0141 секунд с 7
ELECTRONIX ©2004-2016