Eric Lengyel dobrovolně uvolnil jako volné dílo svůj patentovaný algoritmus Slug. Algoritmus vykresluje text a vektorovou grafiku na GPU přímo z dat Bézierových křivek, aniž by využíval texturové mapy obsahující jakékoli předem vypočítané nebo uložené obrázky a počítá přesné pokrytí pro ostré a škálovatelné zobrazení písma, referenční ukázka implementace v HLSL shaderech je na GitHubu. Slug je volným dílem od 17. března letošního
… více »Sashiko (GitHub) je open source automatizovaný systém pro revizi kódu linuxového jádra. Monitoruje veřejné mailing listy a hodnotí navrhované změny pomocí umělé inteligence. Výpočetní zdroje a LLM tokeny poskytuje Google.
Cambalache, tj. RAD (rapid application development) nástroj pro GTK 4 a GTK 3, dospěl po pěti letech vývoje do verze 1.0. Instalovat jej lze i z Flathubu.
KiCad (Wikipedie), sada svobodných softwarových nástrojů pro počítačový návrh elektronických zařízení (EDA), byl vydán v nové major verzi 10.0.0 (𝕏). Přehled novinek v příspěvku na blogu.
Letošní Turingovou cenu (2025 ACM A.M. Turing Award, Nobelova cena informatiky) získali Charles H. Bennett a Gilles Brassard za základní přínosy do oboru kvantové informatiky, které převrátily pojetí bezpečné neprolomitelné komunikace a výpočetní techniky. Jejich protokol BB84 z roku 1984 umožnil fyzikálně zaručený bezpečný přenos šifrovacích klíčů, zatímco jejich práce o kvantové teleportaci položila teoretické základy pro budoucí kvantový internet. Jejich práce spojila fyziku s informatikou a ovlivnila celou generaci vědců.
Firefox 149 dostupný od 24. března přinese bezplatnou vestavěnou VPN s 50 GB přenesených dat měsíčně (s CZ a SK se zatím nepočítá) a zobrazení dvou webových stránek vedle sebe v jednom panelu (split view). Firefox Labs 149 umožní přidat poznámky k panelům (tab notes, videoukázka).
Byla vydána nová stabilní verze 7.9 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 146. Přehled novinek i s náhledy v příspěvku na blogu.
Dle plánu byla vydána Opera GX pro Linux. Ke stažení je .deb i .rpm. V plánu je flatpak. Opera GX je webový prohlížeč zaměřený na hráče počítačových her.
GNUnet (Wikipedie) byl vydán v nové major verzi 0.27.0. Jedná se o framework pro decentralizované peer-to-peer síťování, na kterém je postavena řada aplikací.
Byly publikovány informace (technické detaily) o bezpečnostním problému Snapu. Jedná se o CVE-2026-3888. Neprivilegovaný lokální uživatel může s využitím snap-confine a systemd-tmpfiles získat práva roota.
Fraction::Fraction(int znum, int zden) {
num = znum;
den = zden;
normalize();
}
Fraction::Fraction(double f) {
num = int(f) * 10000;
num += int((f - int(f))*10000.0);
den = 10000;
normalize();
}
Fraction Fraction::operator+(Fraction b) {
return Fraction(den*b.num+b.den*num, den*b.den);
}
...
c4=-.5+c1
Teraz s pouzitim gcc 4.0.3 dostanem chybu:
no match for ‘operator+’ in ‘-5.0e-1 + c1’
Po takejto uprave to chodi:
c4=Fraction(-.5)+c1
V com je problem? Nemal by sa implicitne pouzit konstruktor Fraction(double)?
Aby vám tohle prošlo, musel byste použít samostatný operátor, ne metodu. Tedy např.:
inline Fraction operator + (const Fraction& x, const Fraction& y)
{
return Fraction(x.den*y.num+y.den*x.num, x.den*y.den);
}
den a num su private. Radsej uvediem kompletny kod. Trochu som cvicil s C++ pred par rokmi no daleko som sa nedostal, teraz som znovu dostal chut
.
fraction.h:
#ifndef FRACTION_H
#define FRACTION_H
#include <iostream>
using namespace std;
class Fraction
{
int num, den;
int gcd(int, int);
public:
Fraction(int = 0, int = 1);
Fraction(double);
Fraction(const Fraction&);
void normalize();
Fraction operator+(const Fraction&);
Fraction operator-();
Fraction operator-(const Fraction&);
Fraction operator*(const Fraction&);
Fraction operator/(const Fraction&);
const int numerator() const;
const int denominator() const;
friend ostream& operator<<(ostream& os, const Fraction& z);
friend istream& operator>>(istream& is, Fraction& z);
const double toDouble() const;
};
#endif
fraction.cpp:
#include "fraction.h"
int Fraction::gcd(int a, int b) {
int c = 1;
a = (a >= 0) ? a : - a;
b = (b >= 0) ? b : - b;
while (c > 0) {
c = a % b;
a = b;
b = c;
}
return a;
}
Fraction::Fraction(int znum, int zden) {
num = znum;
den = zden;
normalize();
}
Fraction::Fraction(const Fraction& z):num(z.num), den(z.den) {
cout << "Fraction(const Fraction&) : " << *this << endl;
}
Fraction::Fraction(double f) {
num = int(f) * 10000;
num += int((f - int(f))*10000.0);
den = 10000;
normalize();
}
void Fraction::normalize() {
int lgcd = gcd(num, den);
num /= lgcd;
den /= lgcd;
}
Fraction Fraction::operator+(const Fraction &b) {
return Fraction(den*b.num+b.den*num, den*b.den);
}
Fraction Fraction::operator-() {
return Fraction(-num, den);
}
Fraction Fraction::operator-(const Fraction& b) {
return Fraction(b.den*num-den*b.num, den*b.den);
}
Fraction Fraction::operator*(const Fraction& b) {
return Fraction(num*b.num,den*b.den);
}
Fraction Fraction::operator/(const Fraction& b) {
return Fraction(num*b.den, den*b.num);
}
const int Fraction::numerator() const {
return num;
}
const int Fraction::denominator() const {
return den;
}
ostream& operator<<(ostream& os, const Fraction& z) {
if(z.den == 1)
return os << z.num;
else
return os << z.num << "/" << z.den;
}
istream& operator>>(istream& is, Fraction& z) {
char c;
is >> z.num;
is >> c;
is >> z.den;
return is;
}
const double Fraction::toDouble() const
{
return double(num)/double(den);
}
fractest.cpp:
#include <iostream>
#include "fraction.h"
#define P(x) cout << "[" #x "] = " << (x) << endl;
/*
inline Fraction operator+(const Fraction& x, const Fraction& y) {
return Fraction(x+y);
}
*/
int main()
{
Fraction c1(12,123);
Fraction c2(98);
Fraction c3(0,1);
Fraction* c5 = new Fraction(2,3);
P(c1); P(c2); P(c3); P(*c5);
P(c3=c1+c2);
P(c3=c1-c2);
P(c3=c1*c2);
P(c3=c1/c2);
P(*c5=c1+c2+c3);
P(c3=c1+c2/c3-c1);
P(c3=(c1+c2)/(c3-c1));
Fraction c4 = c3;
P(c4);
P(c4=c1+5+5.5);
P(c4=7);
P(c4=-.5);
P(c4=c4+c1);
P(c4=Fraction(-.5)+c1);
// P(c4=-.5+c1);
P(c4=c1-.5);
P(c4.toDouble());
// P(double(c4));
delete c5;
return 0;
}
Jestli je problém jen v tom, že jsou private, tak buď v implementaci operátoru použíjte přístupové metody numerator() a denominator() nebo ten operátor deklarujte jako friend.
Mimochodem, z logiky věci by asi metodu gcd() bylo v tomto případě vhodnější deklarovat jako static.
Tiskni
Sdílej: