Если это весь код, то эти потери несущественны, по сравнению с читабельностью. Если это часть большого проекта, то явно это еще где-то будет использоваться и каждый раз делать этот бред... Ну не знаю.. Где то читал, что преждевременная оптимизация один из главных врагов программиста
Но ведь ещё каждая единица этого числа при этом значит 0.0625
и для этого вы умножаете их на 10.000.000 вместо 10.000, не вписываетесь в 2 байте, кидаете все во float, а когда вас спрашивают на кой вам эти 3 нуля - получаем ответ - "для точности"
ГЕНИАЛЬНО! еще одна медаль
Rumata пишет:
А что с flоat`ом не так?
с ним все так - но зачем!!!!! как минимум 3 варианта решения были предложены, тема давно имеет оптимальное решение "на все случаи жизни" оно простое и ни разу не секретное. Но ТС вообще даже не пытается это осознать - у него же работает!!! т.е. саморазвитие на уровне регрессии.
UPD а для точности юзаем всю мантиссу - чего добру пропадать...
Ну, тогда и потребителю на экран выводим с шестью знаками. Иначе за что боролись-то? Сохраняли точность сохраняли, а перед "доставкой потребителю" взяли и обрезали :-(
Помнится какой-то деятель выступал на конференции и рассказывал о пакете для расчётов геометрических размеров строительных конструкций. И как на особое достоинство упирал, что гарантирована точность в 9 десятичных знаков. Ему задали опрос: "Вот Вы считаете размеры с точностью до нанометров. Вы собираетесь эти расчёты использовать для строительства офиса Роснано или для чего чего-то ещё?" Ответа я не расслышал, т.к. весь зал в отрытую ржал.
можно конечно и поржать, но если за базу брать данные предыдущей итерации расчетов то погрешность набежит, как мне кажется, не?
в математике есть выражение "необходимо и достаточно" и "необходимость" и "достаточность" в математике считаются вместе - именно считаются, а не прикидываются на пальцах. В добавок есть готовые модели и "принцип чайника"
По даташиту точность ds18b20 - плюс-минус полградуса. Но пренебрегают четвёртым знаком только халтурщики, т.к. вдруг этот четвёртый знак как раз и будет на границе градуса, например! Так что нечего халтурить, правильно ТС Вас тут всех умыл!
Во-первых речь шла о конечном результате, а во-вторых существуют разные расчётные модели - одни накапливают погрешность, другие - нет, а есть и такие, которые компенсируют.
можно конечно и поржать, но если за базу брать данные предыдущей итерации расчетов то погрешность набежит, как мне кажется, не?
Подавляющее большинство реальных конструкций/механизмов в реальном мире рассчитывалось на логарифмической линейке - т.е. считались ТРИ ЗНАЧАЩИХ ЦИФРЫ. И у большинства рабочих (не лабораторных) приборов, работающих в цеховых/гаражных условиях, погрешность редко лучше 1%.
В некоторых случаях действительно нужна ощутимо бОльшая точность. Таких сравнительно немного.
Чей-то Дим-мычъ интерес к вопросу потерял, надо маслеца подлить :)))
// полное преобразование 11 разрядного(без знака) значения датчика DS18B20
// в десятичные разряды для вывода на индикатор
unsigned long _x = (unsigned long)chislo; // переводим значения датчика в unsigned long
_x = _x * 625ul; // получаем десятичное значение без дроби
//с макс.знач. 1 279 375 (7-мь разрядов)
for ( int ii = 6; 0 != (ii--); ) // получаем значение всех разрядов
{ // начиная с младшего / седьмого
a[ii] = (byte)(_x % 10ul);
_x = _x / 10ul;
}
Чей-то Дим-мычъ интерес к вопросу потерял, надо маслеца подлить :)))
// полное преобразование 11 разрядного(без знака) значения датчика DS18B20
// в десятичные разряды для вывода на индикатор
unsigned long _x = (unsigned long)chislo; // переводим значения датчика в unsigned long
_x = _x * 625ul; // получаем десятичное значение без дроби
//с макс.знач. 1 279 375 (7-мь разрядов)
for ( int ii = 6; 0 != (ii--); ) // получаем значение всех разрядов
{ // начиная с младшего / седьмого
a[ii] = (byte)(_x % 10ul);
_x = _x / 10ul;
}
О наконец-то! Спасибо, проверю позже обязательно. Сейчас занят пока.
Может, я чего-то упустил, но 0.0625 - это 1/16. Т.е. для получения целых надо сдвинуть на 4 разряда вправо, а для получения десятых - выделить эти 4 разряда (по маске) умножить на 10 и снова сдвинуть на 4 разряда вправо. При этом байтовые сложение и умножение выполняются аппаратно (одного байта достаточно), а ресурсоемкое деление не используется вообще. В коде это десятки байтов - не больше.
Чей-то Дим-мычъ интерес к вопросу потерял, надо маслеца подлить :)))
// полное преобразование 11 разрядного(без знака) значения датчика DS18B20
// в десятичные разряды для вывода на индикатор
unsigned long _x = (unsigned long)chislo; // переводим значения датчика в unsigned long
_x = _x * 625ul; // получаем десятичное значение без дроби
//с макс.знач. 1 279 375 (7-мь разрядов)
for ( int ii = 6; 0 != (ii--); ) // получаем значение всех разрядов
{ // начиная с младшего / седьмого
a[ii] = (byte)(_x % 10ul);
_x = _x / 10ul;
}
Отлично nibelung! Всё работает норм. Хорошая идея делить на 10 и брать остаток в байте.
Мне такая идея не заходила совсем.
Один цикл, правда пришлось добавить
С Вашей функцией мой скетч в целом занимает(2114байт) 6% памяти устройств и 4%дин памяти
С моей (2234)7% и 4% соответственно. По другому не знаю как и что померить
Но в качестве разница очевидна, ещё раз спасибо, ждал этого с первого поста)))
А вот данные термометра в Протеусе и выводимые на индикатор :
на термометре 0.1 -- индикатор ---- 0.1250
0.2 --------------------- 0.2500
0.3 -------------------- 0.3125
0.4 -------------------- 0.4375
Они говорят, что термометр в Proteus работает по полной, но никто этого не видит и не ценит)))
Да незашто. Я сюда зашел потренироваться код в форум вставлять)))
Протеус это только модель, реальный Даллас вам и не такое покажет. По даташиту там точность +- 0.5 градуса, все что меньше это шумы.
Если вам температуру померять - делайте как в посте #127.
А если хотите сигналы сотовых на Даллас ловить, тогда отбрасывайте целую часть, берите только дробную с точностью до пятого знака после запятой. Вот только шифрование там лютое, до разговора тяжело будет добраться )))))
Чей-то Дим-мычъ интерес к вопросу потерял, надо маслеца подлить :)))
// полное преобразование 11 разрядного(без знака) значения датчика DS18B20
// в десятичные разряды для вывода на индикатор
unsigned long _x = (unsigned long)chislo; // переводим значения датчика в unsigned long
_x = _x * 625ul; // получаем десятичное значение без дроби
//с макс.знач. 1 279 375 (7-мь разрядов)
for ( int ii = 6; 0 != (ii--); ) // получаем значение всех разрядов
{ // начиная с младшего / седьмого
a[ii] = (byte)(_x % 10ul);
_x = _x / 10ul;
}
Ты отрицательные температуры потерял. Нужно в лонг со знаком переводить, потом обработать знак, оставить модуль и его "разлагать на атомы" ;))).
Видимо, недостаточно 50000000 повторений о том, что даташит не читают по одной цифре на первой странице. Повторю еще раз.
Ты сам еще не понимаешь, почему у тебя на форуме репутация пи..дабола? Вот поэтому. Я уже писал тебе, что исправить твою репутацию можно исключительно тем, что свои высеры будешь подтверждать.
В ДШ, кроме указания в таблице, есть только график типичного распределения ошибок по 3-м сигма. И какие выводы ты из него делаешь, которые подтвердят высер: "всё гораздо сложнее"?
По даташиту там точность +- 0.5 градуса, все что меньше это шумы.
глубокое заблуждение.
Ок, согласен, погорячился. +- 0.5 это возможная разница в показаниях разных датчиков, при измерении одной и той же температуры. Чтобы доверять показаниям датчика с точностью выше чем 0.5 градуса, его нужно калибровать. Без калибровки, все что меньше 0.5 градуса будет не достоверно.
В ДШ, кроме указания в таблице, есть только график типичного распределения ошибок по 3-м сигма. И какие выводы ты из него делаешь, которые подтвердят высер: "всё гораздо сложнее"?
Из твоего высера я делаю вывод, что ты посмотрел в книгу и увидел фигу. Ни прочитать сам график и увидеть что там нет "+-0.5, всё что ниже шум", ни понять, что такое стандартное отклонение, ты не осилил, "3-м сигма".
понять, что такое стандартное отклонение, ты не осилил
И не говори! Пять лет на МехМате - коту под хвост! ;)) Так что там "гораздо сложнее"? Какое место в ДШ говорит о том, что точность (или хотя бы относительная точность) иная, чем 0.5° ? Просто в строчку "ткни"...
ЗЫ: От каждой ведь бочки затычка!!!! Ну просто от каждой. Ткнули носом в глупость - нет бы заткнуться, он снова продолжает.
Напряги мозг и ответь, какое это вообще имеет отношение к показаниям ОДНОГО И ТОГО ЖЕ датчика? ;))) Клоунишка! Это даже кроме того, что картинко приведено как "типичное" распределение, а не гарантированное.
------------
Еще раз: Ткнули носом в свое дерьмо - скажи: "спасибо за науку", и иди себе с Б..гом.
Речь идет не о реальности, а о том, что написано в ДШ, а вот там ничего про точность и стабильность не написано.
(кроме пресловутых 0.5)
да нет, там несколько вещей написано:
- на каждой странице в заголовке -Programmable Resolution;
- The core functionality of the DS18B20 is its direct-todigital temperature sensor. The resolution of the temperature sensor is user-configurable to 9, 10, 11, or 12 bits, corresponding to increments of 0.5°C, 0.25°C, 0.125°C, and 0.0625°C, respectively.
Спрашивается, к чему бы так упираться в это разрешение , если оно и на фиг не сдалось?
Но есть непосредственно и о термостабильности
- Drift (Note 11) ±0.2 °C , а из Note 11 => Drift data is based on a 1000-hour stress test at +125°C with VDD = 5.5V.
т.е. ±0.2 °C вот такая термостабильность в экстремальных долговременных условиях, соответственно в более щадящих можно рассчитывать на лучшие параметры, что практика и подтверждает.
А что с flоat`ом не так?
много места занимает.
Хотя ТС наверняка не совсем правильно считает размер прошивки и, как обычно :), делает из этого неверные выводы.
много места занимает.
Я правильно понял, те пол-страницы говнокода с кучей лишних переменных жрут меньше места? О как!
Я правильно понял, те пол-страницы говнокода с кучей лишних переменных жрут меньше места? О как!
если это единственное использование float в коде - то да
Если это весь код, то эти потери несущественны, по сравнению с читабельностью. Если это часть большого проекта, то явно это еще где-то будет использоваться и каждый раз делать этот бред... Ну не знаю.. Где то читал, что преждевременная оптимизация один из главных врагов программиста
И всё же завершу тему. Пробовал с float. Не этот код ,немного другой. Выглядит компактней, но больше жрёт ресурса
ардуины. На больших компах конечно же должен работать лучше. А у меня даже на пяти разрядах память устройств возросла до 10%.
При моём коде 7%.
Поэтому привожу окончательный вариант полного преобразования . Топорно выглядит, но зато работает.
Для первого скетча норм)))
Если кто-то спросит зачем? Спросите у DALLAS, зачем они делают такие датчики.
Это ж просто угар! Вам смешно, а мне штаны менять! ;))))
А никто этому чуду не сказал, что два байта от Далласа - просто знаковое целое 16 битное? Со всеми вытекающими... ;))
А никто этому чуду не сказал ...
Скажи! Ты это скажешь, другой - другое, так тема мож и до пятницы доживёт :-)
два байта от Далласа - просто знаковое целое 16 битное? Со всеми вытекающими... ;))
Были два гения по перемещению запятой, типа туда-сюда бит никто и не заметит)))
Пытались насмехаться и оскорблять, но я весёлый человек, не парюсь.
Но если бы, допустим b707 не знал бы сколько будет 2+2, я бы не стал его называть идиотом
Т.к. это как-то не достойно...
А по делу: любому коту понятно , что два байта это знаковое целое 16 бит
Но ведь ещё каждая единица этого числа при этом значит 0.0625
А уже не каждый кот знает, как перевести это в десятичные разряды(я то уже знаю))), да ведь ещё красиво
и без лишних затрат.
P.S.
Впредь сообщения не на человеческом языке буду фильтровать как их и нет
Но ведь ещё каждая единица этого числа при этом значит 0.0625
и для этого вы умножаете их на 10.000.000 вместо 10.000, не вписываетесь в 2 байте, кидаете все во float, а когда вас спрашивают на кой вам эти 3 нуля - получаем ответ - "для точности"
ГЕНИАЛЬНО! еще одна медаль
А что с flоat`ом не так?
с ним все так - но зачем!!!!! как минимум 3 варианта решения были предложены, тема давно имеет оптимальное решение "на все случаи жизни" оно простое и ни разу не секретное. Но ТС вообще даже не пытается это осознать - у него же работает!!! т.е. саморазвитие на уровне регрессии.
Гриш, ты не понимаешь - если нет четвертого знака после запятой - "теряется точность" :) Так только халтурщики поступают...
Гриш, ты не понимаешь - если нет четвертого знака после запятой - "теряется точность" :)
UPD для этого мы берем 5 знаков, и плевать, что четвертый и пятый у нас нули - это ведь все равно точнее чем без них :)))))))))))))))))))
UPD а для точности юзаем всю мантиссу - чего добру пропадать...
UPD а для точности юзаем всю мантиссу - чего добру пропадать...
Ну, тогда и потребителю на экран выводим с шестью знаками. Иначе за что боролись-то? Сохраняли точность сохраняли, а перед "доставкой потребителю" взяли и обрезали :-(
Помнится какой-то деятель выступал на конференции и рассказывал о пакете для расчётов геометрических размеров строительных конструкций. И как на особое достоинство упирал, что гарантирована точность в 9 десятичных знаков. Ему задали опрос: "Вот Вы считаете размеры с точностью до нанометров. Вы собираетесь эти расчёты использовать для строительства офиса Роснано или для чего чего-то ещё?" Ответа я не расслышал, т.к. весь зал в отрытую ржал.
Гриш, ты не понимаешь - если нет четвертого знака после запятой - "теряется точность" :) Так только халтурщики поступают...
Какой там разброс то у ds18b20? Недавно тема была)))
Гриш, ты не понимаешь - если нет четвертого знака после запятой - "теряется точность" :) Так только халтурщики поступают...
Какой там разброс то у ds18b20? Недавно тема была)))
читайте пост 52 - вырезка, потом продолжим обсуждение
т.к. весь зал в отрытую ржал.
можно конечно и поржать, но если за базу брать данные предыдущей итерации расчетов то погрешность набежит, как мне кажется, не?
т.к. весь зал в отрытую ржал.
можно конечно и поржать, но если за базу брать данные предыдущей итерации расчетов то погрешность набежит, как мне кажется, не?
в математике есть выражение "необходимо и достаточно" и "необходимость" и "достаточность" в математике считаются вместе - именно считаются, а не прикидываются на пальцах. В добавок есть готовые модели и "принцип чайника"
Какой там разброс то у ds18b20?
По даташиту точность ds18b20 - плюс-минус полградуса. Но пренебрегают четвёртым знаком только халтурщики, т.к. вдруг этот четвёртый знак как раз и будет на границе градуса, например! Так что нечего халтурить, правильно ТС Вас тут всех умыл!
:-)
Жалко Далласов! Не читали этой ветки, а то бы закрыли уже свою лавочку)))
Не ну есть повод для улыбки!)))
т.к. весь зал в отрытую ржал.
можно конечно и поржать, но если за базу брать данные предыдущей итерации расчетов то погрешность набежит, как мне кажется, не?
В некоторых случаях действительно нужна ощутимо бОльшая точность. Таких сравнительно немного.
Жалко Далласов! Не читали этой ветки, а то
хоть поржали бы с нами))
Вопщем, я уею, дорогая редакция...
Наданапицца.
Чей-то Дим-мычъ интерес к вопросу потерял, надо маслеца подлить :)))
Чей-то Дим-мычъ интерес к вопросу потерял,
Ему некогда, он разрабов протеуса троллит))
Чей-то Дим-мычъ интерес к вопросу потерял, надо маслеца подлить :)))
О наконец-то! Спасибо, проверю позже обязательно. Сейчас занят пока.
Да, мы уж поняли
Ему некогда, он разрабов протеуса троллит))
:-)
Может, я чего-то упустил, но 0.0625 - это 1/16. Т.е. для получения целых надо сдвинуть на 4 разряда вправо, а для получения десятых - выделить эти 4 разряда (по маске) умножить на 10 и снова сдвинуть на 4 разряда вправо. При этом байтовые сложение и умножение выполняются аппаратно (одного байта достаточно), а ресурсоемкое деление не используется вообще. В коде это десятки байтов - не больше.
С языка снял. Неистово плюсую и снимаю шляпу за усидчивость. Сам расписывать поленился. Остановился на 1/16 .
а ресурсоемкое деление не используется вообще.
Вы сейчас по стенке горохом бросили....
Может, я чего-то упустил, но 0.0625 - это 1/16. Т.е. для получения целых надо сдвинуть на 4 разряда вправо,
угу.... пост 9
ну и с 24уже написали, еще попробуйте тупо подвинуть значения на 4 бита (уберите лишние) и выведите результат.
Чей-то Дим-мычъ интерес к вопросу потерял, надо маслеца подлить :)))
Отлично nibelung! Всё работает норм. Хорошая идея делить на 10 и брать остаток в байте.
Мне такая идея не заходила совсем.
Один цикл, правда пришлось добавить
С Вашей функцией мой скетч в целом занимает(2114байт) 6% памяти устройств и 4%дин памяти
С моей (2234)7% и 4% соответственно. По другому не знаю как и что померить
Но в качестве разница очевидна, ещё раз спасибо, ждал этого с первого поста)))
А вот данные термометра в Протеусе и выводимые на индикатор :
на термометре 0.1 -- индикатор ---- 0.1250
0.2 --------------------- 0.2500
0.3 -------------------- 0.3125
0.4 -------------------- 0.4375
Они говорят, что термометр в Proteus работает по полной, но никто этого не видит и не ценит)))
Да незашто. Я сюда зашел потренироваться код в форум вставлять)))
Протеус это только модель, реальный Даллас вам и не такое покажет. По даташиту там точность +- 0.5 градуса, все что меньше это шумы.
Если вам температуру померять - делайте как в посте #127.
А если хотите сигналы сотовых на Даллас ловить, тогда отбрасывайте целую часть, берите только дробную с точностью до пятого знака после запятой. Вот только шифрование там лютое, до разговора тяжело будет добраться )))))
По даташиту там точность +- 0.5 градуса, все что меньше это шумы.
Врешь. Там всё гораздо сложнее, чем "все что меньше это шумы"
По даташиту там точность +- 0.5 градуса, все что меньше это шумы.
Врешь.
Даташит от Maxim Integrated
Даташит от Dallas Semiconductor
Чей-то Дим-мычъ интерес к вопросу потерял, надо маслеца подлить :)))
Ты отрицательные температуры потерял. Нужно в лонг со знаком переводить, потом обработать знак, оставить модуль и его "разлагать на атомы" ;))).
Видимо, недостаточно 50000000 повторений о том, что даташит не читают по одной цифре на первой странице. Повторю еще раз.
Ты отрицательные температуры потерял. Нужно в лонг со знаком переводить, потом обработать знак, оставить модуль и его "разлагать на атомы" ;))).
Знаю. Но не все же делать за ТС, это был его, немного поправленный код. Пусть и сам немного потрудится ))
Пусть и сам немного потрудится ))
А ты наивный! ;)) Это пройдёт с годами.
Видимо, недостаточно 50000000 повторений о том, что даташит не читают по одной цифре на первой странице. Повторю еще раз.
Ты сам еще не понимаешь, почему у тебя на форуме репутация пи..дабола? Вот поэтому. Я уже писал тебе, что исправить твою репутацию можно исключительно тем, что свои высеры будешь подтверждать.
В ДШ, кроме указания в таблице, есть только график типичного распределения ошибок по 3-м сигма. И какие выводы ты из него делаешь, которые подтвердят высер: "всё гораздо сложнее"?
По даташиту там точность +- 0.5 градуса, все что меньше это шумы.
По даташиту там точность +- 0.5 градуса, все что меньше это шумы.
Вот ёщё один!
ДШ даже стабильность не гарантирует. Она есть, но из практики, а не из ДШ.
Кстати про "шум" ДШ вообще ничего не говорит. ;))
По даташиту там точность +- 0.5 градуса, все что меньше это шумы.
Ок, согласен, погорячился. +- 0.5 это возможная разница в показаниях разных датчиков, при измерении одной и той же температуры. Чтобы доверять показаниям датчика с точностью выше чем 0.5 градуса, его нужно калибровать. Без калибровки, все что меньше 0.5 градуса будет не достоверно.
В ДШ, кроме указания в таблице, есть только график типичного распределения ошибок по 3-м сигма. И какие выводы ты из него делаешь, которые подтвердят высер: "всё гораздо сложнее"?
Из твоего высера я делаю вывод, что ты посмотрел в книгу и увидел фигу. Ни прочитать сам график и увидеть что там нет "+-0.5, всё что ниже шум", ни понять, что такое стандартное отклонение, ты не осилил, "3-м сигма".
понять, что такое стандартное отклонение, ты не осилил
И не говори! Пять лет на МехМате - коту под хвост! ;)) Так что там "гораздо сложнее"? Какое место в ДШ говорит о том, что точность (или хотя бы относительная точность) иная, чем 0.5° ? Просто в строчку "ткни"...
ЗЫ: От каждой ведь бочки затычка!!!! Ну просто от каждой. Ткнули носом в глупость - нет бы заткнуться, он снова продолжает.
Весна однако, зимой был спокойнее и адекватнее.
На этом разговор с дебилом завершаю.
На этом разговор с дебилом завершаю.
Ну так-то подставлять себя зачем?
Напряги мозг и ответь, какое это вообще имеет отношение к показаниям ОДНОГО И ТОГО ЖЕ датчика? ;))) Клоунишка! Это даже кроме того, что картинко приведено как "типичное" распределение, а не гарантированное.
------------
Еще раз: Ткнули носом в свое дерьмо - скажи: "спасибо за науку", и иди себе с Б..гом.
Ты не прав, wdrakula.
Ты не прав, wdrakula.
в чем?
Речь идет не о реальности, а о том, что написано в ДШ, а вот там ничего про точность и стабильность не написано.
(кроме пресловутых 0.5)
Речь идет не о реальности, а о том, что написано в ДШ, а вот там ничего про точность и стабильность не написано.
(кроме пресловутых 0.5)
да нет, там несколько вещей написано:
- на каждой странице в заголовке -Programmable Resolution;
- The core functionality of the DS18B20 is its direct-todigital temperature sensor. The resolution of the temperature sensor is user-configurable to 9, 10, 11, or 12 bits, corresponding to increments of 0.5°C, 0.25°C, 0.125°C, and 0.0625°C, respectively.
Спрашивается, к чему бы так упираться в это разрешение , если оно и на фиг не сдалось?
Но есть непосредственно и о термостабильности
- Drift (Note 11) ±0.2 °C , а из Note 11 => Drift data is based on a 1000-hour stress test at +125°C with VDD = 5.5V.
т.е. ±0.2 °C вот такая термостабильность в экстремальных долговременных условиях, соответственно в более щадящих можно рассчитывать на лучшие параметры, что практика и подтверждает.