
А так нормуль. Он uint переделал в float и поделил на uint , результат float. Ну частотомером проверял - все точно .
Вы запустили?
348831 просмотров, 196 ответов — стр. 8 из 14

Uint64_t нужно весь результат приводить , а не только результат деленияВы что скобок не заметили? Подставьте не "круглое" значение. Я вводил несколько цифр частоты. Ведь по своей сути формулы абсолютно одинаковы. Но Вы делите маленькое число "denom" на частоту, которая почти равна ему, и здесь будет погрешность. И потом эту погрешность Вы умножаете на очень большое число. Вот скрин экрана симулятора с Вашей строкой. Прикиньте на калькуляторе. Частота задана 39000000.
У вас denom за пределами приведения к uint64Не может он быть за пределами. Это не я его взял "с потолка". Это Clockbuilder выдал такое значение.
Поставьте скобку не после деления а за denomПоставил и получил то же значение, что и с Вашей строкой и оно ошибочное. Ну ладно, не будем толочь воду. У нас разные среды, потому спор беспочвенный. Мне важно получить правильный результат.
Я пишу в CLion платныйНе, жаба давит..
Есть разница ?Да, согласен.. Но у меня тут еще хуже ситуация. По моей формуле считает не правильно. Тут Вы правы. Цифра, которую считает компьютер - 725849473024, а должно быть 726840619323. А по Вашей формуле, выдает вообще 549755813760. Причем, число это какое-то заколдованное. Задал другую частоту - изменил на 500 кгц, а цифра эта осталась неизменной. Вот я и устроил полемику.. Вчера провозился часа три, так ничего и не добился. Примерно такая же формула (как Ваша) присутствует в расчете для Si5351A. И там мой компилятор выдает верный результат. Хрень какая-то..
У вас denom за пределами приведения к uint64Именно так.. Я ошибочно посчитал, что в Си для AVR есть два формата чисел с плавающей запятой. Float и double. Вот тут например информация:
;
; //page