| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| float в mikroC http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=6585 |
Страница 1 от 1 |
| Автор: | maiden [ Сря Фев 25, 2009 4:08 pm ] |
| Заглавие: | float в mikroC |
Здравейте, пиша една програмка на C da изчислява една задачка по оптимизация. задавам flaot променлива=израз; след като отпечатам променливата излиза че се пази само цялата част но не и дробната. Поддържа ли float mikroC? |
|
| Автор: | bateAz [ Сря Фев 25, 2009 4:52 pm ] |
| Заглавие: | |
A как я "отпечатваш"? Ако може пусни сорса, дето го "отпечатва". |
|
| Автор: | Zdrav [ Сря Фев 25, 2009 5:21 pm ] |
| Заглавие: | |
Зависи и как си написал израза. Ако не си съобразил някои неща... често срещано явление е да загубиш дробната част. |
|
| Автор: | maiden [ Сря Фев 25, 2009 5:48 pm ] |
| Заглавие: | |
float a=3.1; float b=4.1; float result; int df; void main() { Usart_Init(9600); result=2*a*a+2*a*b+6*b*b+2*a-3*b+3; //очаквам резултат 142,4 df=(result*10)/10; Usart_Write(df); df=((int)result*10)%10; Usart_Write(df); //Получавам 142,0 } Слаб програмист съм .помогнете:) .... Направих го така float a=3.1; float b=4.1; float result; int df; void main() { Usart_Init(9600); result=2*a*a+2*a*b+6*b*b+2*a-3*b+3; очаквам142,4 df=result*10; df%=10; Usart_Write(result); Usart_Write(df); //получавам 142,3 } пак не става |
|
| Автор: | ¶ [ Сря Фев 25, 2009 6:14 pm ] | |||||||||
| Заглавие: | ||||||||||
Аз ги разделям по бабешкия начин числата:
Usart_write() пребразува ли ти числото от двоично до двоично-десетично представяне ? Ако не го преобразува нам да ти разпечата числото с цифри от 0 до 9, ами с цифри от 0 до F |
||||||||||
| Автор: | maiden [ Сря Фев 25, 2009 6:41 pm ] |
| Заглавие: | |
¶, и така не става това предполагам е на CCS ,което си написал... това int16 предполагам е int.. няма в микроС int16 double fractional, integer; void main() { Usart_Init(9600); result=2*a*a+2*a*b+6*b*b+2*a-3*b+3; integer = (double)result; Usart_Write(integer); fractional = (double)((result-(float)integer)*100); Usart_Write(fractional); иначе на терминала си показва десетични числа |
|
| Автор: | maiden [ Сря Фев 25, 2009 7:31 pm ] |
| Заглавие: | |
Usart_write изпраща двоичен байт. Има функция отделно за конвертиране в binary to BCD.Така мисля де.. Твоята препоръка стана с 22.0/7.0 и получих на терминала точно 3.14. Сложих пак израза и получавам 142.39 |
|
| Автор: | Zdrav [ Чет Фев 26, 2009 8:27 am ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Така не се прави. В този ред когато кастваш result към int вече си загубил дробната част. Трябва да е:
Ако ти е все едно как се закръглява резултата и искаш да опростиш и ускориш кода може да пропуснеш добавянето на 0.5. При следващите варианти които си опитал също имаш грешки, но няма да се спирам на тях. Какво прави Usart_Write() е отделен въпрос. |
|||||||||||||||||||
| Автор: | valioman [ Чет Фев 26, 2009 9:58 am ] |
| Заглавие: | |
а що не пробваш по бабешкия начин ... не знам МикроЦ то дали има printf() ама дори и да няма пробвай да конвертираш в string и тогава да го хвърлиш по uart-a |
|
| Автор: | ps66 [ Чет Фев 26, 2009 10:16 am ] |
| Заглавие: | |
доколкото разбирам на младежа проблема е че вместо 142.4 (точния резултат) - той получава 142.39 и това го притеснява ! освен очевидните грешки при int/float преобразуванията, .. може да е резултат от закръгленията (междинни стойности ...) на туй microC (или както му викат) ...или по-точно на библиотеките му за плаващи сметки! пробвай да закръгляш до разряда който те интересува - така ще е и по-коректно по принцип ! пример: резултата ти е 142.399999 - което си е баш 142.4 ... но не съвсем |
|
| Автор: | maiden [ Чет Фев 26, 2009 6:00 pm ] |
| Заглавие: | |
Zdrav, мерси така стана както си ми написал df=((int)(result*100 + 0.5))%100; съответно като се умножава .10,.100 и съответно накрая %10,%100 се регулират значещите цифри. Благодаря и на другите.Много полезен форум за тези които се занимават с тези неща.Много има да чета още за "С" че досега бях само с асемблер. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|