- 001
- 002
- 003
- 004
- 005
- 006
- 007
- 008
- 009
- 010
- 011
- 012
- 013
- 014
- 015
- 016
- 017
- 018
- 019
- 020
- 021
- 022
- 023
- 024
- 025
- 026
- 027
- 028
- 029
- 030
- 031
- 032
- 033
- 034
- 035
- 036
- 037
- 038
- 039
- 040
- 041
- 042
- 043
- 044
- 045
- 046
- 047
- 048
- 049
- 050
- 051
- 052
- 053
- 054
- 055
- 056
- 057
- 058
- 059
- 060
- 061
- 062
- 063
- 064
- 065
- 066
- 067
- 068
- 069
- 070
- 071
- 072
- 073
- 074
- 075
- 076
- 077
- 078
- 079
- 080
- 081
- 082
- 083
- 084
- 085
- 086
- 087
- 088
- 089
- 090
- 091
- 092
- 093
- 094
- 095
- 096
- 097
- 098
- 099
- 100
using namespace std;
#include <typeinfo>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <math.h>
#include <stdarg.h>
template <unsigned FRA,unsigned EXP>
struct F {
union{
float f;
unsigned ui;
unsigned ef : FRA+EXP;
struct
{
unsigned f : FRA;
unsigned e : EXP;
unsigned s : 1;
} s;
};
F (double x){f=x;}
F operator =(const double x) {
f=x; return *this;
}
#define NOOP ;
#define UN(OP,BODY, RET) float operator OP( ) { BODY; return RET;}
#define BIN(OP,BODY, RET) F operator OP(F other ) { BODY; return RET;}
#define BINF(OP,BODY,RET) F operator OP(const float other) { BODY; } BIN(OP,BODY,RET)
#define CMP(OP) bool operator OP(const F& other)
UN ( - , s.s^=1 , (f) )
BIN( += , f+=other.f , ( *this ) )
BIN( + , NOOP , { f+other.f} )
BIN( - ,++other.s.s , {*this+other} )
BIN( * , NOOP , fmul(f,{other}) )
BIN( / , div(other), ( *this ) )
BINF(*=, ui=fmul(*this ,{other}).ui, ( *this ) )
BINF(/=, ui=fmul(*this,rcp(other)).ui, ( *this ) )
CMP(==){
return other.ui==ui;
}
F out(string s) const{
printf("> %s%f\n",s.c_str(),f);
}
F plus(F other)
{
f+=other.f;
return *this;
}
F div(F other)
{
ui=fmul(rcp(other),{f}).ui;
return *this;
}
F sqrt()
{
s.e-=127;
ui>>=1;
s.f-=(s.f>>4);
s.e+=127;
return *this;
}
F pow(int n)
{
s.e-=127;
ui*=n;
ef+=(ef>>4);
ef-=(ef>>9);
s.e+=127;
return *this;
}
private:
static F rcp(F f) {
f.s.e=(~f.s.e-2);
f.s.f=(~f.s.f-2);
return f;
}
static F fmul(F r,F b)
{
r.s.s ^= b.s.s;
r.ef += ((r.s.f&b.s.f)>>4);
r.ef += b.ef ;
r.s.e+= 129;
return r;
}
};
using F32 = F<23,8>;
static F32 of32(float x)
Царь был прав. Во всём.
Патамучто это плавающий питух, который априори говно. И чем вы быстрее это поймёте, чем будет лучше.
В соответствии со своим пониманием сделал мммаксимально простую реализацию плавающих питухов произвольного размера.
Строго на интах.
Пример здесь:
uhttps://ideone.com/dDrj7s
3.14159265 16.05.2018 20:15 # +2
То я решил сделать реализацию плавучки на крестах. И что самое ужасное: мне понравилось!
Ах да. Все умножения, деления, rcp и корни сделаны строго на сдигах и сложнениях.
roskomgovno 16.05.2018 20:22 # 0
guest8 16.05.2018 22:39 # −999
Alexander 16.05.2018 22:40 # −1
shit_again 16.05.2018 20:25 # 0
Какой-то новый протокол появился?
roskomgovno 16.05.2018 20:39 # 0
тт -- пс!
1024-- 16.05.2018 20:35 # 0
3.14159265 16.05.2018 21:43 # 0
После чего можно без переписывания кода лепить произвольные плавающие питухи.
Например: using double = F<52,11>;
PS> Ссылки на хабр не осталось где Царь хвалил кресты?
Просветить человечка выше:
Тсарь не мог одобрить C++
guest8 16.05.2018 21:50 # −999
1024-- 17.05.2018 17:04 # +1
И это работает? ОМГ. Кому-то (Тарасу?) в джаве пришлось в потроха лезть, чтоб число поменять, а тут так.
Где-то тут среди комментариев: https://habr.com/users/superhackkiller1997/comments/
3.14159265 17.05.2018 20:59 # +1
Нет. Это я накрестячил, имел ввиду /s/127/(1<<EXP)-1/
А жаль
shit_again 17.05.2018 21:12 # 0
guest8 17.05.2018 21:18 # −999
guest8 17.05.2018 21:21 # −999
guest8 17.05.2018 21:22 # −999
semens 17.05.2018 23:42 # 0
lal3 19.05.2018 22:08 # 0
guest8 19.05.2018 22:12 # −999
shit_again 16.05.2018 20:58 # 0
guest8 16.05.2018 21:21 # −999
Alexander 16.05.2018 21:17 # −1
Antervis 18.05.2018 11:37 # +2
const-некорректны операторы * / + - ==
отсутствуют constexpr, noexcept
нет операторов < > <= >=
посрал - смойсделал на дефайнах - сделай и undef
shit_again 18.05.2018 12:07 # 0
А дефайны можно вообще к хуям убрать.
guest8 18.05.2018 12:13 # −999
Ded_Maksim 18.05.2018 12:26 # −1
Antervis 18.05.2018 12:55 # +1
https://wandbox.org/permlink/KtD8RFQOUkEtpt0y
1 эквивалентен NaN (т.к. 1 < NaN и NaN < 1 выдают false), но 1 не равен NaN.
Поэтому, а еще потому, что иногда честная реализация операторов сравнения оптимальнее реализации через другие операторы, для числовых типов надо честно реализовывать все операторы сравнения
shit_again 18.05.2018 14:38 # 0
subaru 19.05.2018 11:04 # −1
Он не должен присутствовать. Мы же нормальные программисты, а не метушки какие-нибудь.
Antervis 19.05.2018 20:33 # +1
roskomgovno 13.06.2018 23:46 # +3
Я все жду когда в С++ тоже будет две профессии: метапрограммист и просто программист
roman-kashitsyn 14.06.2018 01:24 # 0
Джуниор Мак, ага http://www.gigamonkeys.com/book/macros-defining-your-own.html
roman-kashitsyn 15.06.2018 14:03 # +1
программирует программистов?
bormand 15.06.2018 14:04 # +1
3.14159265 15.06.2018 14:10 # 0
guest8 15.06.2018 14:41 # −999
roman-kashitsyn 15.06.2018 14:10 # +1
Ну он же не программист, а программист программистов, поэтому он не может себя программировать.
guest8 15.06.2018 14:22 # −999
guest8 15.06.2018 14:26 # −999
roman-kashitsyn 15.06.2018 17:25 # 0
guest8 15.06.2018 17:31 # −999
bormand 15.06.2018 17:32 # 0
guest8 15.06.2018 17:34 # −999
1024-- 18.06.2018 09:25 # +1
>> Поясню суть вопроса. Нужно ли упразднить термин "программист", а вместо него употреблять явно "программист ЭВМ" и "программист программистов"?
> Можно, но сам в себя он не влезет.
Интересный вопрос подняли.
Просто программист может умолчать о том, что/кого он программирует, за счёт чего попасть в любой клуб программистов:
666_N33D135 18.06.2018 09:31 # +1
1024-- 18.06.2018 09:49 # 0
666_N33D135 18.06.2018 16:01 # 0
3.14159265 13.06.2018 22:52 # 0
Да.
>отсутствуют constexpr, noexcept
Пффф.
>нет операторов < > <= >=
Не влезли в 100 строк. Заготовка в виде CMP имеется.
roskomgovno 14.06.2018 21:45 # 0
Хочу чтобы было как в преле: любая последовательность из двух-трех символов -- полезный оператор.
Я вот так с ходу помню летающую тарелку <=> для сортировки, оператор флип-флоп который меняет свое состояние и конечно же оператор goatse =0=
666_N33D135 15.06.2018 04:54 # 0
Сортировка:
/: -- по возрастанию
\: -- по уьыванию.
666_N33D135 15.06.2018 05:05 # 0
roman-kashitsyn 15.06.2018 13:56 # 0
В терминологии APL/J оператор — это функция высшего порядка
http://www.jsoftware.com/papers/APLOperators.htm
> Ну и своё гоатсе имеется
Но мы-то знаем, что это два "оператора", а не один
666_N33D135 15.06.2018 14:42 # 0
> оператор — это функция высшего порядка
В J же это наречием называется?
> зачем были нужны скобки
В данном случае низачем, я просто мудаг.
guest8 15.06.2018 14:51 # −999
roman-kashitsyn 15.06.2018 17:20 # +2
Я J вообще не знаю, да и APL меньше, чем хотелось бы. Честно говоря, мне просто люто доставляют весёлые значки, ну и приколько иногда поломать мозг, чтобы решить задачку в терминах массивов.
> В J же это наречием называется?
Да, похоже на то http://code.jsoftware.com/wiki/Vocabulary/Modifiers
666_N33D135 15.06.2018 17:39 # 0
Ну да, я обычно для большего веселья пишу что могу в тацитной форме.
Кстати, для такого малоиспользуемого языка у J достаточно много библиотек (есть даже OpenGL), правда с документацией по ним не густо.
3.14159265 15.06.2018 17:58 # +3
Вграниты!
... или почему я стал программистом на Хаскеле С++.
guest8 15.06.2018 18:14 # −999
3.14159265 15.06.2018 21:56 # +1
Нет, Настоящий Программист хочет редактор вида «Просил? Так получай!» — сложный, загадочный, мощный, не прощающий ошибок, опасный. TECO, если быть точным.
Было замечено, что последовательность команд TECO более на-
поминает помехи в линии передачи, чем читаемый текст. Одна из
самых развлекательных игр с TECO - напечатать в качестве ко-
мандной строки свою фамилию и попытаться догадаться, что она
сделает. Точно так же любая случайная опечатка при работе с
TECO может разрушить вашу программу, или, хуже того, внести не-
уловимые и мистические ошибки в уже работающую программу.
Самое ржачное, что Emacs, который так котирует Роман произошёл от этого редактора весёлых значков.
guest8 15.06.2018 22:42 # −999
roman-kashitsyn 16.06.2018 01:06 # 0
Смысл не изменится
roskomgovno 16.06.2018 14:17 # +1
sendmail effect (c)
guest8 15.06.2018 18:15 # −999
roman-kashitsyn 16.06.2018 00:28 # 0
Это по сути парафраз Frank Zappa: "Я любил рисовать на нотной бумаге черные кружочки."
А может у меня Space-Cadet простаивает и хочется хоть небольшую часть поддерживаемых символов использовать? нету у меня space-cadet, но было бы круто...
j123123 16.06.2018 01:16 # 0
j123123 16.06.2018 01:18 # 0
guest8 16.06.2018 01:28 # −999