| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Проблем с float i HI-TECH ?!? http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=5212 |
Страница 1 от 1 |
| Автор: | GTN [ Съб Дек 15, 2007 3:55 pm ] |
| Заглавие: | Проблем с float i HI-TECH ?!? |
Здравейте, Вече няколко дена се опитвам да подкарам една проста сметка. Имам си едно float число, и искам да прибавя към него друго float. Да ама нещо не успявам. Ето програмата. Използвам МПЛАБ и HI-TECH. Оптимизациите са изключени. #include <htc.h> #include <stdio.h> float fnum=2.33,fnum2; char outString[8]; void main (void) { fnum2=fnum+2.01; sprintf(outString,"%5.2f",fnum2); }//krai main Преди събирането на двете числа: value decimal fnum =5.885049e-039 4199711 fnum2=0 0 След това: fnum =5.885049e-039 4199711 fnum2=5.927294e-039 4229858 Ако успея да разреша този проблем ще искам да преорбазувам fnum2 до ascii. Пробвах със sprintf(); но записва само едно f в първия елемент на масива. Ако пробвам със "%d" и int вместо float, няма проблеми. Обаче нещо този float ме мъчи. Ще се радвам на идеи за разрешаването на двата проблема |
|
| Автор: | woody [ Съб Дек 15, 2007 5:13 pm ] | |||||||||
| Заглавие: | ||||||||||
Без да знам какъв е този компилатор и за какво е, винаги можеш да разпечаташ какво има в тези променливи преди и след аритметичната операция.
След това анализираш стойностите преди и след събирането примерно. Част от проблемите които може да имаш са криви библиотеки, крива инициализация на инициализираните променливи (fnum), крив sprintf(). Същата програма компилирана за PC ще ти покаже горе-долу на какво приличат числата във little-endian float ако не можеш да си ги конвертираш. |
||||||||||
| Автор: | ps66 [ Съб Дек 15, 2007 5:22 pm ] | |||||||||
| Заглавие: | Re: Проблем с float i HI-TECH ?!? | |||||||||
много стиснат ми се виждаш -> що не вземеш да се поотпуснеш малко ... например: char outString[8+8]; |
||||||||||
| Автор: | GTN [ Съб Дек 15, 2007 5:29 pm ] |
| Заглавие: | |
@woody Компилатора е за PIC микроконтролери, или поне тази версия която аз използвам. Сега ще пробвам това което предлагаш. Ако мога де @ps66 Пробвах и с масив с размер 20,50, 100. Все същата работа |
|
| Автор: | woody [ Съб Дек 15, 2007 5:55 pm ] |
| Заглавие: | |
Трябва да можеш, защо да не? Ако имаш някакъв хардуерен дебъгер или дори симулатор можеш да видиш директно какво е съдържанието на тези променливи по време на изпълнение. Ако не - горния пример трябва да ти свърши работа. |
|
| Автор: | lucifer [ Съб Дек 15, 2007 6:07 pm ] |
| Заглавие: | |
Не знам какъв компилатор ползваш и с какви библиотеки разполагаш, но аз за същото нещо в CodeVision ползвам функцията ftoa от stdlib.h Ето как изглежда и самата функция: static flash float _fround[7]={0.5,0.05,0.005,0.0005,0.00005,0.000005,0.0000005}; void ftoa(float n,unsigned char decimals,char *str) { float scale; unsigned char i,d; if (n<0.0) {n=-n; *str++='-';}; if (decimals>6) decimals=6; n=n+_fround[decimals]; i=0; scale=1.0; while (n>=scale) {scale=scale*10.0; ++i;}; if (i==0) *str++='0'; else while (i--) { scale=floor(0.5+scale/10.0); d=(unsigned char) (n/scale); *str++=d+'0'; n=n-scale*d; }; if (decimals==0) {*str=0; return;}; *str++='.'; while (decimals--) { n=n*10.0; d=(unsigned char) n; *str++=d+'0'; n=n-d; }; *str=0; } |
|
| Автор: | TheWizard [ Съб Дек 15, 2007 6:09 pm ] | |||
| Заглавие: | ||||
Project/Options/... PRINTF - float ако ти ревне за LITE версията Error [141] ; . can't open library file "...........\lib\pcl40c-f.lib": No such file or directory Attachment: добави го в LIB папката
|
||||
| Автор: | GTN [ Съб Дек 15, 2007 6:54 pm ] | |||||||||
| Заглавие: | ||||||||||
Имам хардуерен дебъгер, ще го проверя. Само че сега излезе малко друга работа. Благодаря и на останалите който отговориха. И техните варианти ще пробвам. Дано да стане нещо Приятна вечер на всички |
||||||||||
| Автор: | GTN [ Съб Дек 15, 2007 7:57 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Уфффффф , 2 пъти изчетох ръководството на HI-TECH, ама трябвало и FAQ на сайта им да видя , да разбера защо така се получавало.
Благодаря още веднъж на всички Все пак ще пробвам и вашите варианти |
|||||||||||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|