Автор Тема: Программисты есть на форуме? Простая задачка с заковыкой.  (Прочитано 2977 раз)

Оффлайн voidmain

  • Общительный
  • ***
  • Сообщений: 275
  • Авторитет: 110
  • Пол: Мужской
Ахтунг! Язык демонофф! Многа букаFFh!
Возможны крах системы, потеря данных и красные глаза... В общем, я предупредил!
Поехали!

Дано число с плавающей точкой(от 0 до 999.9999):
float f = 23.0204; //choosen by fair dice roll
Надо разделить целую и дробную часть (в виде количества десятитысячных) и записать их в целочисленные переменные.

Быдлокодим:
uint32_t integer, fractional;

integer = f;
fractional = (f - integer) * 10000;
Получаем в результате:
integer == 23
fractional == 203
Что-то пошло не так...
Нужен результат:
integer == 23
fractional == 204
Пока выкрутился так:
uint32_t fract_int_text(float f, uint32_t *integer)
{
char str[sizeof("999.9999")];
uint32_t fractional;

sprintf(str, "%3.4f",f);
sscanf(str, "%u.%4u", integer, &fractional);
return fractional;
}
Это, конечно, работает. Но еще танцует и поет (см. https://lurkmore.to/Индусский_код).
Да и гонять эти спринтфы ссканфы на микроконтроллере накладно...

Существует ли более удачное решение для подобной задачи?
Пишем на Сях(с плюсами и без).
Я люблю дорогу, скорость и шум мотора. Всё, что хоть немного в жизни сближает нас.

Оффлайн voidmain

  • Общительный
  • ***
  • Сообщений: 275
  • Авторитет: 110
  • Пол: Мужской
Никто мозг не вывихнул еще?  :wacko:
От преобразования через текст удалось избавиться.
uint32_t fract_int(float f, uint32_t *integer)
{
uint32_t t;

*i = f;
t = (uint32_t)((f - *i) * 100000) % 10;
return (f - *i)*10000 + (t >= 5 ?  1 : 0);
}

В общем, корень зла оказался в машинном представлении чисел с плавающей точкой в купе с правилами округления.
Я люблю дорогу, скорость и шум мотора. Всё, что хоть немного в жизни сближает нас.

Оффлайн vavdog

  • Модераторы
  • Местный мототролль
  • *****
  • Сообщений: 7206
  • Авторитет: 719
  • Пол: Мужской
  • Разно-Ninja250R-NC700XA-CTX700D
У меня такое тоже бывает — что-то схватит за душу, держит и не отпускает. И тогда или водка... или к бабам. А лучше всё вместе, сразу и много... (с)
 :grin: :grin:
...vavdog без мотоцикла подобен vavdog'y с мотоциклом, только без мотоцикла...


Оффлайн Змей

  • Свой человек
  • *****
  • Сообщений: 2643
  • Авторитет: 225
  • Пол: Мужской
  • 250r ->ER6-N -> Z750->Super Magna v45
- Ведьму сжечь! - Но она такая красивая... - Хорошо... но потом сжечь

http://avkozyr.ru/-энергосбережение

Оффлайн voidmain

  • Общительный
  • ***
  • Сообщений: 275
  • Авторитет: 110
  • Пол: Мужской
:dash:
Вот вот. Понапридумывают дебильных протоколов...
Кстати, видел я исходники приёмной стороны (на сервере). Там идет обратное преобразование.
Так вот там:

float to_float(uint32_t i, uint32_t f)
{
char s[20];
float f;
        //тут сначала вагон проверок
        //........
        //а потом:

sprintf(s, "%u.%u", i, f);
sscanf(s,"%f", &f);
return f;
}
Анекдот, бля. Обхохочешься.
Вот так на всяких ксеонах многоядерных о ста гигах оперативы хуярят говнокод и орут за новый сервак, бо этот уже не тянет.

PS: В общем, тему можно закрывать.
Задача решена. Землекопа полтора.
Я люблю дорогу, скорость и шум мотора. Всё, что хоть немного в жизни сближает нас.

Оффлайн Zlobniy

  • Местный мототролль
  • *******
  • Сообщений: 5168
  • Авторитет: 293
  • Пол: Мужской
  • Ninja 300 зеленый совсем...
Теперь вы понимаете, что мне надо бухать каждый день, т.к. я это каждый день выслушиваю )))

Онлайн Эль Дуб

  • Местный мототролль
  • *******
  • Сообщений: 8240
  • Авторитет: 598
  • Пол: Мужской
  • 250R-XJ6-CTX700A-F800GT-NINJA650
Вызывайте священика,срочно!
Не важно какой ты водитель, главное Ёлочка освежитель!
1. www.pcsservice.ru
транспорт/таможенное оформление
2. www.alex-meb.ru
Мебельный магазин

Оффлайн voidmain

  • Общительный
  • ***
  • Сообщений: 275
  • Авторитет: 110
  • Пол: Мужской
Вызывайте священика,срочно!
Это линуксоидам надо. Это у них там демоны.

Теперь вы понимаете, что мне надо бухать каждый день, т.к. я это каждый день выслушиваю )))
Как в анекдоте:
Любовь-это не когда он дарит тебе цветы, а ты их нюхаешь...
Это когда он три часа рассказывает тебе про 95 бензин, а ты слушаешь.
Не перебивая...
Я люблю дорогу, скорость и шум мотора. Всё, что хоть немного в жизни сближает нас.

Оффлайн CraftMan

  • В теме
  • ****
  • Сообщений: 1007
  • Авторитет: 52
  • Пол: Мужской
  • Honda CBR 125R
Главная задача программиста - убить в себе перфекциониста
Мой психиатр сказал, что я не смогу завоевать мир... Наивный раб!!!

Онлайн Эль Дуб

  • Местный мототролль
  • *******
  • Сообщений: 8240
  • Авторитет: 598
  • Пол: Мужской
  • 250R-XJ6-CTX700A-F800GT-NINJA650
Главная задача программиста - убить в себе перфекциониста
это что то нахуеверти%ь, сказать что то невнятное и съебат%ся.
Не важно какой ты водитель, главное Ёлочка освежитель!
1. www.pcsservice.ru
транспорт/таможенное оформление
2. www.alex-meb.ru
Мебельный магазин

Оффлайн BlackLady

  • Живу я тут
  • ******
  • Сообщений: 4505
  • Авторитет: 226
  • Пол: Женский
  • Kawasaki Ninja 300
Не, Лёх, то что ты описал, это прерогатива манагеров)
Yamaha YBR125 -> школа ремонта Yamaha FZX250 (Zeal) -> Kawasaki Ninja 300 - для тех, кто знает, что хочет от мотоцикла!

Онлайн Эль Дуб

  • Местный мототролль
  • *******
  • Сообщений: 8240
  • Авторитет: 598
  • Пол: Мужской
  • 250R-XJ6-CTX700A-F800GT-NINJA650
Не, Лёх, то что ты описал, это прерогатива манагеров)
я когда буду президентом, то - юристов, бухгалтеров, компьютерщиков, дизайнеров в сибирь отправлю)))
Не важно какой ты водитель, главное Ёлочка освежитель!
1. www.pcsservice.ru
транспорт/таможенное оформление
2. www.alex-meb.ru
Мебельный магазин

Оффлайн Zlobniy

  • Местный мототролль
  • *******
  • Сообщений: 5168
  • Авторитет: 293
  • Пол: Мужской
  • Ninja 300 зеленый совсем...
я когда буду президентом, то - юристов, бухгалтеров, компьютерщиков, дизайнеров в сибирь отправлю)))
Я торгаш теперь, меня нельзя отправлять!  :so svechoi:

Онлайн Эль Дуб

  • Местный мототролль
  • *******
  • Сообщений: 8240
  • Авторитет: 598
  • Пол: Мужской
  • 250R-XJ6-CTX700A-F800GT-NINJA650
Я торгаш теперь, меня нельзя отправлять!  :so svechoi:
Не, у тебя индульгенция.
Не важно какой ты водитель, главное Ёлочка освежитель!
1. www.pcsservice.ru
транспорт/таможенное оформление
2. www.alex-meb.ru
Мебельный магазин

Оффлайн BlackLady

  • Живу я тут
  • ******
  • Сообщений: 4505
  • Авторитет: 226
  • Пол: Женский
  • Kawasaki Ninja 300
юристов, бухгалтеров, компьютерщиков, дизайнеров в сибирь

То, что на юристов у тебя огромный зуб, это я знаю. С бухгалтерами не очень понятно, ну да и ладно. А чем компьютерщики с дизайнерами не угодили?

у тебя индульгенция

Неожиданный поворот событий... :mda: Я, видимо, чего-то не знаю :ph34r:
Yamaha YBR125 -> школа ремонта Yamaha FZX250 (Zeal) -> Kawasaki Ninja 300 - для тех, кто знает, что хочет от мотоцикла!