Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Вот интересно на самом деле, в чем сложность реализации этих функций. Чел из майкрософта пишет, что он на основе готового strtod месяц (!) пилил реализацию для их либы.
Понятно, что парсинг флоата это нетривиальная задача. Но она ведь уже давным-давно решена в сишке. И наборы тестов там уже есть.
// Distinguish ordinary numbers versus inf/nan with a single test.
// ordinary numbers start with ['.'] ['0', '9'] ['A', 'F'] ['a', 'f']
// inf/nan start with ['I'] ['N'] ['i'] ['n']
// All other starting characters are invalid.
// Setting the 0x20 bit folds these ranges in a useful manner.
// ordinary (and some invalid) starting characters are folded to ['.'] ['0', '9'] ['a', 'f']
// inf/nan starting characters are folded to ['i'] ['n']
// These are ordered: ['.'] ['0', '9'] ['a', 'f'] < ['i'] ['n']
// Note that invalid starting characters end up on both sides of this test.
const unsigned char _Folded_start = static_cast<unsigned char>(static_cast<unsigned char>(*_Next) | 0x20);
if (_Folded_start <= 'f') { // possibly an ordinary number
return _Ordinary_floating_from_chars(_First, _Last, _Value, _Fmt, _Minus_sign, _Next);
} else if (_Folded_start == 'i') { // possibly inf
return _Infinity_from_chars(_First, _Last, _Value, _Minus_sign, _Next);
} else if (_Folded_start == 'n') { // possibly nan
return _Nan_from_chars(_First, _Last, _Value, _Minus_sign, _Next);
} else { // definitely invalid
return {_First, errc::invalid_argument};
}
}
Ну я почитал в мейл листе гцц - они пишут, что реализация должна порвать принтфы и стртоды в клочья. Иначе нету смысла её пилить и можно просто сишную позвать.
gost # 0
Такова участь крестобляди.
Desktop # 0
- а что это за функция? Дока не гуглится по ней
bormand # 0 ⇈
Desktop # 0 ⇈
А то я подумал, что это какая-то стандартная крестометушня, чтобы подсказывать компилятору, с каким типом мы щас будем работать или в этом духе
guest # 0 ⇈
gost # 0 ⇈
bormand # 0
Вот интересно на самом деле, в чем сложность реализации этих функций. Чел из майкрософта пишет, что он на основе готового strtod месяц (!) пилил реализацию для их либы.
Понятно, что парсинг флоата это нетривиальная задача. Но она ведь уже давным-давно решена в сишке. И наборы тестов там уже есть.
gost # 0 ⇈
gost # 0 ⇈
gost # 0 ⇈
gost # 0 ⇈
bormand # 0 ⇈
HoBorogHuu_nemyx # 0 ⇈
bormand # 0 ⇈