- 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
То я решил сделать реализацию плавучки на крестах. И что самое ужасное: мне понравилось!
Ах да. Все умножения, деления, rcp и корни сделаны строго на сдигах и сложнениях.
Какой-то новый протокол появился?
тт -- пс!
После чего можно без переписывания кода лепить произвольные плавающие питухи.
Например: using double = F<52,11>;
PS> Ссылки на хабр не осталось где Царь хвалил кресты?
Просветить человечка выше:
Тсарь не мог одобрить C++
И это работает? ОМГ. Кому-то (Тарасу?) в джаве пришлось в потроха лезть, чтоб число поменять, а тут так.
Где-то тут среди комментариев: https://habr.com/users/superhackkiller1997/comments/
Нет. Это я накрестячил, имел ввиду /s/127/(1<<EXP)-1/
А жаль
const-некорректны операторы * / + - ==
отсутствуют constexpr, noexcept
нет операторов < > <= >=
посрал - смойсделал на дефайнах - сделай и undef
А дефайны можно вообще к хуям убрать.
https://wandbox.org/permlink/KtD8RFQOUkEtpt0y
1 эквивалентен NaN (т.к. 1 < NaN и NaN < 1 выдают false), но 1 не равен NaN.
Поэтому, а еще потому, что иногда честная реализация операторов сравнения оптимальнее реализации через другие операторы, для числовых типов надо честно реализовывать все операторы сравнения
Он не должен присутствовать. Мы же нормальные программисты, а не метушки какие-нибудь.
Я все жду когда в С++ тоже будет две профессии: метапрограммист и просто программист
Джуниор Мак, ага http://www.gigamonkeys.com/book/macros-defining-your-own.html
программирует программистов?
Ну он же не программист, а программист программистов, поэтому он не может себя программировать.
>> Поясню суть вопроса. Нужно ли упразднить термин "программист", а вместо него употреблять явно "программист ЭВМ" и "программист программистов"?
> Можно, но сам в себя он не влезет.
Интересный вопрос подняли.
Просто программист может умолчать о том, что/кого он программирует, за счёт чего попасть в любой клуб программистов:
Да.
>отсутствуют constexpr, noexcept
Пффф.
>нет операторов < > <= >=
Не влезли в 100 строк. Заготовка в виде CMP имеется.
Хочу чтобы было как в преле: любая последовательность из двух-трех символов -- полезный оператор.
Я вот так с ходу помню летающую тарелку <=> для сортировки, оператор флип-флоп который меняет свое состояние и конечно же оператор goatse =0=
Сортировка:
/: -- по возрастанию
\: -- по уьыванию.
В терминологии APL/J оператор — это функция высшего порядка
http://www.jsoftware.com/papers/APLOperators.htm
> Ну и своё гоатсе имеется
Но мы-то знаем, что это два "оператора", а не один
> оператор — это функция высшего порядка
В J же это наречием называется?
> зачем были нужны скобки
В данном случае низачем, я просто мудаг.
Я J вообще не знаю, да и APL меньше, чем хотелось бы. Честно говоря, мне просто люто доставляют весёлые значки, ну и приколько иногда поломать мозг, чтобы решить задачку в терминах массивов.
> В J же это наречием называется?
Да, похоже на то http://code.jsoftware.com/wiki/Vocabulary/Modifiers
Ну да, я обычно для большего веселья пишу что могу в тацитной форме.
Кстати, для такого малоиспользуемого языка у J достаточно много библиотек (есть даже OpenGL), правда с документацией по ним не густо.
Вграниты!
... или почему я стал программистом на Хаскеле С++.
Нет, Настоящий Программист хочет редактор вида «Просил? Так получай!» — сложный, загадочный, мощный, не прощающий ошибок, опасный. TECO, если быть точным.
Было замечено, что последовательность команд TECO более на-
поминает помехи в линии передачи, чем читаемый текст. Одна из
самых развлекательных игр с TECO - напечатать в качестве ко-
мандной строки свою фамилию и попытаться догадаться, что она
сделает. Точно так же любая случайная опечатка при работе с
TECO может разрушить вашу программу, или, хуже того, внести не-
уловимые и мистические ошибки в уже работающую программу.
Самое ржачное, что Emacs, который так котирует Роман произошёл от этого редактора весёлых значков.
Смысл не изменится
sendmail effect (c)
Это по сути парафраз Frank Zappa: "Я любил рисовать на нотной бумаге черные кружочки."
А может у меня Space-Cadet простаивает и хочется хоть небольшую часть поддерживаемых символов использовать? нету у меня space-cadet, но было бы круто...