- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 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, но было бы круто...
J#
C#
Managed C++
C++/CLI (ECMA-372, гы!)
C++/CX
Ничего не забыл?
У них и обычная Йажа была не совсем обычной: стандартная библиотека не совпадала с Саном, была куча классов с префиксом com.ms или com.microsoft. На этой почве они с Саном разругались, Сан попросил их изделие не называть Java.
Ещё был JScript и миллионы бэйсиков (ну хотя их и без мелгкомяких наплодили)