Size: a a a

2021 February 14

AS

Anatoly Shirokov in supapro.cxx
А по флоат надо читать Форсайта
источник

AS

Anatoly Shirokov in supapro.cxx
Это фундаментальное введение в вычисления с плавающей точкой
источник

EP

EKCKABATOP54 Poshtar... in supapro.cxx
А на плюсах есть подработка? Студентикам лабы писать за копеечку. Есть такой вариант?
источник

AM

Alex Menzfolder in supapro.cxx
источник

s

std::slavik in supapro.cxx
Anatoly Shirokov
Если ты хотел кого-то чему-то научить, то рассказал бы о подходе принятым в условиях невозможности работать с плавающей точкой. О переводе вещественный чисел к целочисленным вычислениям за счет ввода масштабного коэффициента. А так твой пример звучит так "для суммы используй интеграл", но без каких-либо объяснений
так я и начал говорить - что важно оценить динамический диапазон величины которой мы оперируем - у фиксированной точки абсолютная погрешность представления фиксированная - половина значащего бита, то есть мы одинаково точно представляем как максимальное число нашего диапазона, так и минимальное, это важно, например для денег, или измерение высоты, температуры, времени, скорости, массы - для этих величин важно чтобы абсолютная погрешность была фиксированной - независимо от того сколько у меня денег на счете - мне важна каждая копейка, если это время - каждый тик.
В фиксированной точке мы при представлении маленького числа имеем высокую относительную погрешность - для величины в 1 бит - относительная погрешность будет половина величины, и с увеличением числа будет уменьшаться.

В плавающей точке больше абсолютная погрешность - так как под мантиссу отводится меньше бит чем в фиксированной. Но зато относительная погрешность меньше изменяется от самого маленького до самого большого числа.

То есть если у тебя величины одного порядка - ты не получишь особого профита от плавающей точки
потому что тупо не используешь биты отведенные под показатель степени и просто потеряешь точность.

Но если, например нужно записать звук -
а мы можем различать очень тихие звуки и очень громкие. И для нас важно чтобы весь диапазон был захвачен и чем тише уровень звука тем больше была детализация - тогда тут используется плавающая точка - которая как раз для большого динамического диапазона.
источник

s

std::slavik in supapro.cxx
ну и плюс еще у плавающей точки есть нормализация мантиссы всякая
источник

AS

Anatoly Shirokov in supapro.cxx
std::slavik
так я и начал говорить - что важно оценить динамический диапазон величины которой мы оперируем - у фиксированной точки абсолютная погрешность представления фиксированная - половина значащего бита, то есть мы одинаково точно представляем как максимальное число нашего диапазона, так и минимальное, это важно, например для денег, или измерение высоты, температуры, времени, скорости, массы - для этих величин важно чтобы абсолютная погрешность была фиксированной - независимо от того сколько у меня денег на счете - мне важна каждая копейка, если это время - каждый тик.
В фиксированной точке мы при представлении маленького числа имеем высокую относительную погрешность - для величины в 1 бит - относительная погрешность будет половина величины, и с увеличением числа будет уменьшаться.

В плавающей точке больше абсолютная погрешность - так как под мантиссу отводится меньше бит чем в фиксированной. Но зато относительная погрешность меньше изменяется от самого маленького до самого большого числа.

То есть если у тебя величины одного порядка - ты не получишь особого профита от плавающей точки
потому что тупо не используешь биты отведенные под показатель степени и просто потеряешь точность.

Но если, например нужно записать звук -
а мы можем различать очень тихие звуки и очень громкие. И для нас важно чтобы весь диапазон был захвачен и чем тише уровень звука тем больше была детализация - тогда тут используется плавающая точка - которая как раз для большого динамического диапазона.
И теперь важно, чтобы тебя еще и поняли, какую мысль ты доносишь. Надо обозначить твою целевую аудиторию. Если это ты пишешь для себя, то ок, если для кого-то еще, то для кого?
источник

AS

Anatoly Shirokov in supapro.cxx
Берем паренька с average. Ты пишешь: не надо флоат, делай фикс поинт. А почему?
источник

AS

Anatoly Shirokov in supapro.cxx
Он же проходит пока основные  типы int, float. Пробует их.
источник

j

jp :)) zxc in supapro.cxx
Ребят, напомните, на каком сайте можно кинуть код, а потом перебросить кому то ссылкой?
источник

D

Danya in supapro.cxx
jp :)) zxc
Ребят, напомните, на каком сайте можно кинуть код, а потом перебросить кому то ссылкой?
источник

AS

Anatoly Shirokov in supapro.cxx
jp :)) zxc
Ребят, напомните, на каком сайте можно кинуть код, а потом перебросить кому то ссылкой?
Wandbox, ideone
источник

s

std::slavik in supapro.cxx
короче мой поинт в том что люди должны понимать, что плавающая точка используется не когда у нас числа с разрядами после запятой в десятичном представлении - мы можем и не используя плавающую точку прекрасно оперировать такими числами(при этом более точно это делать, но нужно следить за переполнением), а когда для нашей величины важно чтобы мы могли одинаково точно оперировать маленькими числами с маленькими и большими с большими - например звук - для очень громких звуков - уровень давления будет отличаться в разы, а громкость воспринимаемая - меньше, то есть для очень громких звуков нам не так важна детализация, но зато она важна для очень тихих - мы по сути переводим в логарифмическую шкалу все, как и на лабах - для некоторых величин эта шкала полезна, для других - нет
В данном примере - мы делим 123456789 / 2, что очевидно равно в точности 61728394.5 и при умножении результата деления на 2 обратно - ожидаем получить 123456789,  с фиксированной точкой - мы просто домножаем число на 10, делим на 2 и при выводе делим обратно на 10 и с точностью до 1 знака после  запятой получаем число. В плавающей же точке мы получаем при делении 61728396.0 потеряв точность и при умножении обратно на 2 - 123456792 вместо 123456789 - если бы это были деньги на вашем счете - вы бы потеряли 3 денежки просто на ровном месте(вернее - владелец банка, а вы в плюсе на 3р).
источник

MK

Mikhail Kalugin in supapro.cxx
Anatoly Shirokov
Берем паренька с average. Ты пишешь: не надо флоат, делай фикс поинт. А почему?
А главное, бедолага бы и не понял что целое/целое = целое...
источник

AS

Anatoly Shirokov in supapro.cxx
Mikhail Kalugin
А главное, бедолага бы и не понял что целое/целое = целое...
В итоге так и было. Он делил целое на целое и не понимал, где остаток
источник

AS

Anatoly Shirokov in supapro.cxx
std::slavik
короче мой поинт в том что люди должны понимать, что плавающая точка используется не когда у нас числа с разрядами после запятой в десятичном представлении - мы можем и не используя плавающую точку прекрасно оперировать такими числами(при этом более точно это делать, но нужно следить за переполнением), а когда для нашей величины важно чтобы мы могли одинаково точно оперировать маленькими числами с маленькими и большими с большими - например звук - для очень громких звуков - уровень давления будет отличаться в разы, а громкость воспринимаемая - меньше, то есть для очень громких звуков нам не так важна детализация, но зато она важна для очень тихих - мы по сути переводим в логарифмическую шкалу все, как и на лабах - для некоторых величин эта шкала полезна, для других - нет
В данном примере - мы делим 123456789 / 2, что очевидно равно в точности 61728394.5 и при умножении результата деления на 2 обратно - ожидаем получить 123456789,  с фиксированной точкой - мы просто домножаем число на 10, делим на 2 и при выводе делим обратно на 10 и с точностью до 1 знака после  запятой получаем число. В плавающей же точке мы получаем при делении 61728396.0 потеряв точность и при умножении обратно на 2 - 123456792 вместо 123456789 - если бы это были деньги на вашем счете - вы бы потеряли 3 денежки просто на ровном месте(вернее - владелец банка, а вы в плюсе на 3р).
Слава, я и говорю надо определиться с целевой аудиторией.
источник

w

waldo in supapro.cxx
А для чего :1 тут? Что он делает?

struct Foo
{
   int8_t bIsActive:1;
};
источник

AS

Anatoly Shirokov in supapro.cxx
waldo
А для чего :1 тут? Что он делает?

struct Foo
{
   int8_t bIsActive:1;
};
источник

w

waldo in supapro.cxx
А. Спасибо
источник

s

std::slavik in supapro.cxx
Anatoly Shirokov
Слава, я и говорю надо определиться с целевой аудиторией.
ну для целевой аудитории которая не хочет разбираться в деталях - можно такой дать совет - если вы вычисляете что-то, скажем в метрах, и вам важна точность до 2го знака после запятой - вместо использования плавающей точки скорей всего лучше будет просто считать в сантиметрах, домножив на 100, для тех кто хочет немного в деталях разобраться - короткая статья по основным моментам, еще очень хорошо тема представления чисел в компьютере, вычислений, оптимизации с прикладными примерами раскрывается в книжке, на этом я все - просто школьное/вузовское образование лучшего зачастую желать оставляет и у многих в этой части важной фундаментальной - пробел, так что я при случае стараюсь обращать внимание на нее
источник