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

 
 
> Не работает правильно, вычисление float в Keil, Деление на 10
_Алекс
сообщение Feb 14 2017, 05:21
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 14-09-06
Пользователь №: 20 377



Код округление числа до десятых.

float x = 0;

x = 401 * 0.0625; //25.0625
x = x * 10; //250.625
x = x + 0.5; //251.125
x = floor(x); //251
x = x / 10; // Ошибка!

При делении 251 на 10, вроде должно быть 25.1, а получается 25.0999995.
Если float поменять на double, работает. Но, в маем случае очень не удобно использовать double.
Код в другой среде, работает и с float.
Понято, что происходит потеря точности.

Может есть другой способ округлить число до десятых.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Feb 14 2017, 06:40
Сообщение #2


Гуру
******

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



QUOTE (_Алекс @ Feb 14 2017, 07:21) *
Понято, что происходит потеря точности.
или число 25.1 невозможно представить типом float с принятым у кейла размером мантиссы. Проверьте просто x = 25.1;

не слушайте psL, он продемострировал незнание основ языка.


--------------------
На любой вопрос даю любой ответ
"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
psL
сообщение Feb 14 2017, 09:11
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



Цитата(Сергей Борщ @ Feb 14 2017, 09:40) *
или число 25.1 невозможно представить типом float с принятым у кейла размером мантиссы. Проверьте просто x = 25.1;


не слушайте Борща с его принятым размером мантисы.

Keil использует IEEE-754:
http://www.keil.com/support/man/docs/armli...58938949149.htm

которого достаточно для представления 25.1, можно проверить, например, здесь:
https://www.h-schmidt.net/FloatConverter/
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 14 2017, 10:00
Сообщение #4


Гуру
******

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



QUOTE (psL @ Feb 14 2017, 11:11) *
Вы бы хоть немного ознакомились с тем, на что ссылаетесь (хотя бы по википедии):
QUOTE
Возможные конечные значения, которые могут быть представлены в формате, определяются основанием b, количеством цифр в мантиссе (с точностью р) и максимальным значением emax:


И лично вам в коллекцию: неявное приведение типов


--------------------
На любой вопрос даю любой ответ
"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
psL
сообщение Feb 14 2017, 12:03
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



Цитата(Сергей Борщ @ Feb 14 2017, 13:00) *
Вы бы хоть немного... И лично вам...

Спасибо, конечно, но Вы бы лучше мысль свою пояснили про приведение типов. Смысл моего предложения ТС был в том, что при делении на 10 происходит приведение целого к вещественному с потерей точности, а при умножении вещественных точность выше, чем при делении. В чем я не прав? Только своими словами. Не нужно "братву с википедии" подтягивать.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- _Алекс   Не работает правильно, вычисление float в Keil   Feb 14 2017, 05:21
- - psL   попробуйте поделить на 10.0 или умножить на 0.1f   Feb 14 2017, 05:48
|||- - Сергей Борщ   QUOTE (psL @ Feb 14 2017, 14:03) В чем я ...   Feb 14 2017, 14:19
||- - ar__systems   Цитата(psL @ Feb 14 2017, 04:11) не слуша...   Feb 14 2017, 16:24
|- - ar__systems   Цитата(Сергей Борщ @ Feb 14 2017, 01:40) ...   Feb 14 2017, 16:06
- - k155la3   Цитата(_Алекс @ Feb 14 2017, 09:21) Код о...   Feb 14 2017, 06:49
- - Ruslan1   Цитата(_Алекс @ Feb 14 2017, 07:21) При д...   Feb 14 2017, 08:10
- - _Алекс   Ерунда, похоже, с Keil. double Round (double x...   Feb 14 2017, 09:17
- - HardEgor   Цитата(_Алекс @ Feb 14 2017, 12:21) x = 4...   Feb 14 2017, 09:25
|- - _Алекс   Цитата(HardEgor @ Feb 14 2017, 13:25) А о...   Feb 14 2017, 09:32
- - Lagman   вот есть еще калькулятор который показывает и 25.1...   Feb 14 2017, 15:14
- - conan   В двоичном формате с плавающей запятой точно предс...   Feb 14 2017, 16:10


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

 


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


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