- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
$a != abs($a)
$a+abs($a) == 0
$a && !($a + abs($a))
$n>>1 > $n
substr_count($a,"-")
is_nan(sqrt($number))
is_nan(log($n))
!array_shift(explode("-", $num))
(int)$var === ~~(int)$var
strlen(strval($num)) != strlen(strval(abs($num)))
strlen(decbin($n)) == 32
is_int(strpos(get_headers("http://habrahabr.ru/blogs/php/page$num/")[0], '404'));
function lessThanZero ($num) {
while (1) {
if ($num++ == 0) {
return true;
}
}
}
function is_value_between($value, $begin, $end) {
return in_array($value, range($begin,$end));
}
gcc на них нет:
Оно вернёт true или переполнит int.
Оно вернёт true или повиснет нахуй.
Т.е. даже с unsigned это тупо return true. И даже если в цикле не инкрементить, то один фиг return true.
З.Ы. Нефиг писать функции, которые возвращают только одно значение )))
Если бы num было беззнаковым, тогда всё просто — в конце концов num переполнится и станет равным 0.
Если бы знаковое переполнение не было бы UB — то же самое.
Убери инкремент и он всё равно выкинет... Либо num уже ноль и мы вернём true либо всё повиснет и нам пофиг, можно тоже вернуть true.
Программа B называется аппроксимацией программы A, если для всех случаев, в которых A завершается B завершается с тем же результатом.
Т.е. формально любой UB эквивалентен зависанию.
Именно поэтому мы можем аппроксимировать программу с UB'ом при помощи более простой программы, которая забивает на поведение под UB'ом.
> за границы массива
Это я вроде постила.
Может еще нужно чтоб была особая функция для проверки равенства нулю?
https://www.npmjs.com/~pethu
The Math.sign() function returns either a positive or negative +/- 1, indicating the sign of a number passed into the argument. If the number passed into Math.sign() is 0, it will return a +/- 0. Note that if the number is positive, an explicit (+) will not be returned.
На уровне языка можно так записать?
Модуль decimal является частью стандартной библиотеки языка.
«bcmath» в поставку входит, но в «Ideone» его почему-то не включили.
Ну да, можешь локальный контекст открыть и посчитать что-то, если глобальный крутить не хочется.
В каком еще языке есть такая хер-ня?
Там хоть оператор st =[ cmd ]=> st' можно объявить.
https://riptutorial.com/haskell/example/23080/custom-operators
pethu.<=?=>
<=?=> – это типа постфиксный оператор.
=== есть в Яибу, но там он означает совсем другое. Кто, не подглядывая в справку, вспомнит его значение?
Это просто перегруженный у разных говнов оператор, и он не коммутативен
хотя мне этот оператор тоже не нравица
Т.е. в с++ всё тоже норм т.к. "максимально ожидаемо для полностью изучившего стандарт"?
То есть, никем не ожидаемое?
потому я за "яuбy"
https://ideone.com/Wsigk8
PHP зачем-то при "0" == "-0" и "0" == "0" кастует эти "0" "-0" в числа и потом сравнивает, а при === сравнивает их как строки. Нахуя так надо делать?
Так это давняя смешнявка. Пых (справедливо) считает, что по умочанию ня нём программирует ротоняк, который про эти ваши "типы" ня задумывается, поэтому оператор "==" пытается аргументы-строки привести к числам. В каком-то, кажется, пятом пыхе вообще была встроенная уязвимость, благодаря которой все строки, нячинающиеся с "0e", считались равными. Представь, как это отразилось ня коде пыхомакак, которые сравнивали хэши паролей пользователей через PHP.
https://ideone.com/QUmt2m
Если бы == всегда кастовал в числа, как в том же пёрле, было бы просто и логично. Но это ведь не так. Оно иногда в строки кастует, иногда в числа, ещё и в разных версиях эта эвристика работает по-разному.
Но этот оператор чаще всего используется при сравнении массивов, где он-то удобен.
"php" == 0
https://wiki.php.net/rfc/string_to_number_comparison
В восьмой версии изменили поведение.
Именно поэтому я не люблю полагаться на неявное приведение, а предпочитаю использовать === и явный вызов strval, intval, floatval etc.
Согласен, это предпочтительнее.
>явный вызов strval, intval, floatval etc
А тут я больше привык к (string) и тд. Смысл не меняется.