Newsgroup: it.lavoro.informatica
Titolo: java vs c++ - bigdecimal





piu che java vs c++ il post sarebbe da intitolare java vs gmp.

Questo perche c++ non ha nella lib std un bigdecimal.

Boost offre questa apportunita,ma ho preferito scegliere le libgmp in 

quanto conosciute,veloci,open source,disponibili in qualunque distro 

linux ed ovviamente offrono una interfaccia c++.

Per il benchmark ho scelto l'algoritmo Bailey-Borwein-Plouffe per il 

calcolo delle Nesime cifre di pigreco.

Non e' il piu veloce metodo conosciuto ma per gli scopi prefissi va piu 

che bene.

Per chi e' interessato l' algoritmo espresso in modo matematico lo puo 

trovare qui:

https://it.wikipedia.org/wiki/Calcolo_di_pi_greco#Formula_BBP_.28base_16.29


Per visualizzare le cifre basta lanciare i corrispettivi programma con 

il secondo argomento diverso da 0

Per java:

	java pi 1000 1

per c++

	./a.out 1000 1

La visualizzazione come formato  e' uguale a:

https://it.wikipedia.org/wiki/Pi_greco_(prime_100.000_cifre)


per chi volesse fare un confronto







pi.java:

import java.math.*;





public class pi {



	private static void print(String s,int n) {

		if (s.length() < n)

			n=s.length();

		if (n < 3)  {

  			System.out.println(s);

			return;

		}

		System.out.println(s.substring(0,2));

		int j=1;

		for (int i=2;i < n;++i) {

			System.out.print(s.charAt(i));

			if (j % 10 == 0)

				System.out.print(" ");

			if (j % 170 == 0)

				System.out.println();

			++j;			

		}

		System.out.println();

	}



	public static void main(String args[]){

		final int n=Integer.parseInt(args[0]);

		final boolean isprint=Integer.parseInt(args[1]) != 0;

		final BigDecimal n16=new BigDecimal(1).divide(new BigDecimal(16), 

MathContext.UNLIMITED);

  		final BigDecimal n1=new BigDecimal(1);

		final BigDecimal n2=new BigDecimal(2);

		final BigDecimal n4=new BigDecimal(4);

		BigDecimal s=new BigDecimal(0);

		BigDecimal powi=new BigDecimal(1);

		int n8=0;

		for (int i=0;i < n;++i) {

			if (i != 0) {

				powi=powi.multiply(n16);

				n8 += 8;

			}

			final BigDecimal a = n4.divide(new BigDecimal(n8 + 

1),n,RoundingMode.HALF_UP);

			final BigDecimal b = n2.divide(new BigDecimal(n8 + 

4),n,RoundingMode.HALF_UP);

			final BigDecimal c = n1.divide(new BigDecimal(n8 + 

5),n,RoundingMode.HALF_UP);

			final BigDecimal d = n1.divide(new BigDecimal(n8 + 

6),n,RoundingMode.HALF_UP);

			s=s.add(a.subtract(b).subtract(c).subtract(d).multiply(powi));

		}

		if (isprint)

			print(s.toPlainString(),n);

	}

};



pi.cpp:

#include <iostream>

#include <sstream>

#include <climits>

#include "gmpxx.h"



template <typename T>

inline T convert(const char* s) {

	T n;

	std::istringstream os(s);

	os >> n;

	return n;

}



using d_t=mpf_class;



static void print(const d_t& d,std::size_t n) {

	std::ostringstream ostr;

	ostr.precision(n);

	ostr << d;

	if (ostr.str().size() < 2) {

		std::cout << ostr.str() << std::endl;

		return;

	}

	auto s=ostr.str();

	std::cout << s.substr(0,2) << std::endl;

	long j=1;

	for (std::size_t i=2;i < n;++i) {

		std::cout << 
s.at
(i);

		if (!(j % 10))

			std::cout << " ";

		if (!(j % 170))

			std::cout << std::endl;

		++j;

	}

	std::cout << std::endl;

}



int main(int argc, char** argv) {

	++argv;

	const auto n = convert<unsigned int>(*argv++);

	const auto isprint=convert<int>(*argv) ? true : false;

	const auto bit_precision=n * CHAR_BIT;

	d_t s={0,bit_precision};

	const d_t n1(1,bit_precision);

	const d_t n2(2,bit_precision);

	const d_t n4(4,bit_precision);

	const d_t n16=d_t(1,bit_precision) / d_t(16);

	d_t powi(1);

	for (unsigned int i=0;i < n; ++i) {

		const auto n8=8U * i;

		if (i)

			powi *= n16;

		const d_t p=(

			n4 / d_t(n8 + 1)

			-

			n2 / d_t(n8 + 4)

			-

			n1 / d_t(n8 + 5)

			-

			n1 / d_t(n8 + 6)

		) * powi;

		s += p;

	}

	if (isprint)

		print(s,n);

}





pi.sh:

#!/bin/bash

JAVA_HOME=/opt/jdk1.8.0_192

export PATH="$JAVA_HOME/bin:$PATH"

export LD_LIBRARY_PATH="$JAVA_HOME/lib:$LD_LIBRARY_PATH"

rm -f a.out *.class *.o

javac -version

javac  -O pi.java

g++-8 --version

g++-8 -std=c++17 -Wall -O2 pi.cpp  -lgmp -lgmpxx

for n in  10 100 1000 10000

do

	time java pi  $n 0

	time ./a.out $n 0

done



bash -x ./pi.sh:

+ JAVA_HOME=/opt/jdk1.8.0_192

+ export PATH=/opt/jdk1.8.0_192/bin:...

+ PATH=/opt/jdk1.8.0_192/bin:...

+ export LD_LIBRARY_PATH=/opt/jdk1.8.0_192/lib:

+ LD_LIBRARY_PATH=/opt/jdk1.8.0_192/lib:

+ rm -f a.out pi.class '*.o'

+ javac -version

javac 1.8.0_192

+ javac -O pi.java

+ g++-8 --version

g++-8 (Ubuntu 8.2.0-1ubuntu2~18.04) 8.2.0

Copyright (C) 2018 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.



+ g++-8 -std=c++17 -Wall -O2 pi.cpp -lgmp -lgmpxx

+ for n in 10 100 1000 10000

+ java pi 10 0



real	0m0,050s

user	0m0,042s

sys	0m0,008s

+ ./a.out 10 0



real	0m0,001s

user	0m0,001s

sys	0m0,000s

+ for n in 10 100 1000 10000

+ java pi 100 0



real	0m0,052s

user	0m0,057s

sys	0m0,000s

+ ./a.out 100 0



real	0m0,001s

user	0m0,001s

sys	0m0,000s

+ for n in 10 100 1000 10000

+ java pi 1000 0



real	0m0,157s

user	0m0,301s

sys	0m0,021s

+ ./a.out 1000 0



real	0m0,005s

user	0m0,005s

sys	0m0,000s

+ for n in 10 100 1000 10000

+ java pi 10000 0



real	0m9,588s

user	0m12,042s

sys	0m0,120s

+ ./a.out 10000 0



real	0m0,295s

user	0m0,291s

sys	0m0,004s












 per chi volesse fare un confronto



Interessante, ma mi chiedo: non bastava copiarsi il numero di cifre da 

https://it.wikipedia.or/wiki/Pi_greco_(prime_100.000_cifre)
 ? O di cifre 

ne servivano anche di piu'?

Non capisco il senso.


 piu che java vs c++ il post sarebbe da intitolare java vs gmp.



Non mi capacitero' mai di queste interrogativi.

Fermo restando che c++ lo ho /visto/ da molto lontano

ormai nel tempo e nello spazio e che gmp non so cosa diavolo sia.

Ma.....

il problema, spesso, non sta nel /tool/ che usi ma nel modo

in cui lo usi.

In quanto a /bigdecimal/ mi ci scontro quotidianamente.

Capire a quale primoriale (non lo spiego, credo sia su wikipedia)

appartenesse il 45° primo di Mersenne mi ha richiesto tempo perche'

non mi interessava /automatizzare/ il processo ma ho usato

un /tool/ adatto che era in grado di trattare i /bigdecimal/ e,

soprattutto, che fosse in grado di confrontare, spostare, fare cicli.

I linguaggi /generalpourpose/ servono a facilitare i processi

/generalpourpose/ non mi sognerei mai (bugia! una routinetta la

ho scritta in VBA) per trattare valori che vanno oltre le 64

cifre.

Discutere di Java e bigdecimal e' come discutere con un  contadino

la costante di Hubble.

Al contadino interessa come e quando tagliare il fieno o seminare

o, al massimo, le previsioni meteo delle 24 ore successive.

I due linguaggi che citi sono sostanzialmente la stessa cosa

tutti e due guardano il dito, la Luna e' altra cosa.



-- 

ac (x=y-1)

Aborro il Killfile

(La violenza e' l'ultimo rifugio degli incapaci -Salvor Hardin-)


 Non capisco il senso.



Il senso e' il benchmark,non trovare le Nesime cifre di pigreco

Se il senso fosse stato calcolare le Nesime cifre di pigreco avrei 

scelto l'algoritmo piu veloce conosciuto.

L'algoritmo chudnovsky e molto piu veloce di quello presentato ed esiste 

una implementazione per gmp

Basta cercare in un motore di ricerca  gmp-chudnovsky.c e ti trovi un 

bel programma c che viene usato per calcolare miliardi di cifre di 

pigreco (ovviamente non usando un comune pc).

Il programma e' stato scritto da Hanhong Xue e modificato da  Torbjorn 

Granlund



Ecco l'url:

https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=2ahUKEwiKocX7yovgAhVtja0KHaMZAOoQFjAAegQIARAB&url=https%3A%2F%2Fgmplib.org%2Fdownload%2Fmisc%2Fgmp-chudnovsky.c&usg=AOvVaw2x2euhrI5IaBiih9dONfAI







Il 26/01/19 16:11, Alessandro Cara ha scritto:


Avevo letto da qualche parte che bigdecimal di java usava le gmp

Proprio passato, poiche avevo anche letto che ora oracle aveva cambiato 

politica sui bigdecimal

Non ti so dire,cosi su due piedi,da che versione di java





Da quello che osservo mi sembra di capire che tutti usano tutto.

Forse anche c++ e' in grado di usare qualche /sarchiapone/ esterno

magari anche gmp.

Se fosse cosi' mi dici quale sarebbe la differenza fra c++ e Java?



Io, tra l'altro, quando penso a Java ancora penso a Sun.



Il 26/01/19 16:57, Alessandro Cara ha scritto:


Tutti e due derivano dal c,ma java ha pulito la sintassi c ed aggiunto 

la programmazione ad oggetti e poi la generica

Il compilatore non genera codice nativo ma una sorte di codice 

intermedio (chi non ricorda il pascal pcode ?)

La jvm (incarnata nell'eseguibile  chiamato java) ,e' il programma di 

running ed anche l'ottimizzatore  di codice prima del running.

c++ e figlio diretto di  c, ma al contrario del java mantiene una 

compatibilita con il codice c e' quasi al 100%

E puo chiamare direttamente entry points c mentre java ha bisogno di uno 

strato sw implementato attraverso jni.

Come java,ha in piu di c la programmazione ad oggetti e la 

programmazione generica

Quest'ultima ben piu flessibile di java.

IL compilatore,a parte qualche eccezione, genera codice nativo 

ottimizzato e solo per la piattaforma in uso

Viene poi usato il classico programma di linker per generare l'eseguibile.

Notare la differenza,l'ottimizzazione in c/c++ e' lasciata al 

compilatore e qualcosa al linker mentre in java e per lo piu a carico 

alla jvm.

Mentre un programma java lo fai girare ovunque esista una jvm,per c++ (e 

c) occorre ricompilare e rilinkare.






 Discutere di Java e bigdecimal e' come discutere con un  contadino



Infatti solo due lavoratori della terra potevano iniziare una discussione del genere senza manco aprire il disassembly e vedere che combina il compilatore


 Non capisco il senso.



il senso è che ha fatto l'esercizietto e viene qui a mostrarsi come se 

fosse odifreddi. quando ha semplicemente preso un algoritmo matematico e 

l'ha tradotto in java mettendoci di suo solo le consuete cialtronate.


 intermedio (chi non ricorda il pascal pcode ?)



Smettila di scrivere minchiate, idiota incompetente: 
https://en.wikipedia.org/wiki/Just-in-time_compilation



Il 27/01/19 04:42, 4ndre4 ha scritto:


In computing, just-in-time (JIT) compilation (also dynamic translation 

or run-time compilations)[1] is a way of executing computer code that 

involves compilation during execution of a program – at run time





Ora,ti risulta che abbia scritto di runtime o di compilatore ?




 



Io non mi mostro un bel niente

Non soffro di megalomania


 Ora,ti risulta che abbia scritto di runtime o di compilatore ?



Sai almeno leggere l'inglese, imbecille?


 con me



Ma ancora con queste stupidaggini? Ancora? La smetti di renderti ridicolo, o no? 

Cretino, ti e` stato gia` detto molte volte: se vuoi confrontare qualcosa, fallo bene. Tu sei uno specialista di strawman arguments. Costruisci un argomento fantoccio e lo attacchi. Non puoi confrontare BigDecimal con gmp, idiota colossale che non sei altro. Cosa speri mai di dimostrare?

Prendi un wrapper gmp per Java, prendine uno per C++ e confronta semmai: 
https://mathybit.github.io/java-gmp/


Ma tu, la puzza della montagna di merda che ti attiri addosso da solo, ogni volta che scrivi queste bestialita`, non la senti proprio?


 Il senso e' il benchmark,non trovare le Nesime cifre di pigreco

  Capisco, conseguentemente, dati i presupposti, il benchmark non ha senso.





Se mi dai del lavoratore della terra sono orgoglioso.

Rivoltare la zolla (cioe' aprire il disassembly) mi e' capitato di farlo.

Come lavoratore della terra amo chi ha studiato e mi /insegna/ qualcosa

di nuovo ma in quanto a rivoltare zolle sono un capo!



Il 27/01/19 08:56, 4ndre4 ha scritto:


Ma come,se esiste BigDecimal e gmp e' molto meglio perche' non 

implementare BigDecimal usando gmp ?

Nel fantastico mondo di java,dove oracle offre una libreria immensa,poi 

si scopre che qualcosa fa schifo come prestazione.

Ragazzo mio,scrivi ad oracle,prenditela con lei,non con me.

Io sono come una detective,porto alla luce dei fatti.

Non sono io che ho commesso l'omicidio.






Il 27/01/19 08:48, 4ndre4 ha scritto:


Mi sai che tu non lo sai leggere l'inglese:



is a way of executing computer code that involves compilation during 

execution of a program – at run time





Per il poveraccio che sei te lo devo tradurre?






 





Opinioni tue

Quando qualcosa di java fa schifo come prestazioni chissa perche viene 

fuori che la comparazione non ha mai senso




Il 27/01/2019 09:23, Giuspi ha scritto:

P.S.

Avevo fatto una scommessa con me stesso.

Et voila' nominare Hubble e' stato come rivoltare una zolla di terra!



 la programmazione ad oggetti e poi la generica



Grazie per il /pistolotto/ ma java mi e' capitato di usarlo



 execution of a program – at run time



Deficiente, hai scritto "Il compilatore non genera codice nativo ma una sorte di codice 

intermedio (chi non ricorda il pascal pcode ?)"



Quel "compilation during execution of a program" ti dice niente? Quando la smetterai di sparare sciocchezze su Java senza conoscere il linguaggio?




 Nel fantastico mondo di java



Di "fantastico mondo di Java" parli tu, non gli altri, demente. A fare schifo e` la tua immensa incompetenza e l'idea che si possano fare "benchmark" del genere. Scrivi tu ad Oracle, visto che sei cosi` ossessionato dalla libreria Java e dalle performance. Pero` pubblicaci anche le risate con cui ti risponderanno, eh?

A me, il BigDecimal va benissimo per gli usi che ne faccio. 



Veramente dovresti smetterla di renderti cosi` ridicolo.


 fuori che la comparazione non ha mai senso



Ma quale fare schifo. Chi lo avrebbe dimostrato, tu?

Quando ti viene fatto notare che quel qualcosa che tu ritieni faccia schifo in Java e` stato confrontato da altri con risultati ben diversi, chissa` perche` ignori la questione. Dobbiamo risuscitare la questione del parallelismo? Ti sono stati postati benchmark sul parallelismo SERI, non i tuoi esperimentini idioti, che dimostrano che Java ha prestazioni comparabili, se non migliori, a quelle del C. Li hai bellamente ignorati o rigettati con "chissa` dove vai a prendere questi datI". Patetico buffone, viscido paraculo incompetente.




 Ma quale freno tirato 



lascia perdere, la metafora è per lui. te un c'arrivi neanche con la 

scala.








 implementare BigDecimal usando gmp ?



ohibò, del fatto che gmp non è nella libreria standard c++ non hai niente 

da dire?



sshhh, ti svelo un segreto... sei pronto?

il wrapper è nel repository maven:



https://mvnrepository.com/artifact/com.squareup.jnagmp/jnagmp/2.1.0




la libgmp su linux è su tutti i repository di tutte le distro.



quindi come hai usato la libreria esterna in c++ avresti potuto usare la 

stessa libreria in java, medesimo sforzo forse anche meno.



naturalmente ora dirai che non era quello che volevi fare, eccetera, 

eccetera. insomma la solita storia del collaudatore e il freno a mano, 

hai presente?



sei proprio il peggio... <grin>


Il 27/01/19 10:52, 4ndre4 ha scritto:


compilazione durante l'esecuzione

Non e' il compilatore java che lo fa


 

Si sa benissimo il perche'.


 Non e' il compilatore java che lo fa



Viscido paraculo che non sei altro.




 via sql vai a decodificare il db?



E` un viscido paraculo :) Come tutti i paraculi, quando gli fai una domanda alla quale sa bene di non poter/saper rispondere, tira fuori un "dipende". 



Il bello e` che sputa merda su Java, usando C++ che un tipo a precisione multipla manco ce l'ha.



Eh, cosa vuoi, lui vive all'estero. Non ha dimestichezza con le metafore.


 





Tu non mi ha detto dove stavano i dati



Il 27/01/19 15:33, rootkit ha scritto:


Mi dici che senso ha confrontare una libgmp java che usa jni ?

Il test e' per java, non per c

Semmai avrebbe piu senso confrontare bigdecimal di openjdk dove sono 

sicuro che bigdecimal e' scritto in java (si possono trovare su internet 

i source).

E' facile dire che java e' veloce quando si appoggia a c



Ed ecco il test con openjdk



bash -x ./pi.sh

+ rm -f a.out pi.class '*.o'

+ javac -version

javac 10.0.2

+ javac -O pi.java

+ g++-8 --version

g++-8 (Ubuntu 8.2.0-1ubuntu2~18.04) 8.2.0

Copyright (C) 2018 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.



+ g++-8 -std=c++17 -Wall -O2 pi.cpp -lgmp -lgmpxx

+ for n in 10 100 1000 10000

+ java pi 10 0



real	0m0,079s

user	0m0,088s

sys	0m0,005s

+ ./a.out 10 0



real	0m0,001s

user	0m0,001s

sys	0m0,000s

+ for n in 10 100 1000 10000

+ java pi 100 0



real	0m0,081s

user	0m0,090s

sys	0m0,009s

+ ./a.out 100 0



real	0m0,001s

user	0m0,000s

sys	0m0,001s

+ for n in 10 100 1000 10000

+ java pi 1000 0



real	0m0,186s

user	0m0,382s

sys	0m0,013s

+ ./a.out 1000 0



real	0m0,004s

user	0m0,004s

sys	0m0,000s

+ for n in 10 100 1000 10000

+ java pi 10000 0



real	0m9,451s

user	0m12,708s

sys	0m0,124s

+ ./a.out 10000 0



real	0m0,293s

user	0m0,293s

sys	0m0,000s



Quindi posso supporre,visti i tempi,che anche bigdecimal di oracle sia 

scritto in java.


Il 28/01/19 02:09, 4ndre4 ha scritto:


Non sei neanche capace di ammettere le tue cappelle

Sei solo un toro che quando vede rosso va all'attacco




 Non sei neanche capace di ammettere le tue cappelle



Ah scemo, quali cappelle? Il bue che da` del cornuto all'asino. Vatti a rileggere il post che hai scritto: e` pieno di cappelle. Ti do del paraculo perche` e` quel che sei. Vieni messo all'angolo e non sai uscirtene se non svicolando, eh? :) Vile paraculo che non sei altro.


 Tu non mi ha detto dove stavano i dati



Rispondi alla domanda che ti e` stata fatta. Quale tipo usi in C++?




 E' facile dire che java e' veloce quando si appoggia a c



Così come è facile dire che C++ è veloce quando si appoggia a C. 

Ha ragione rootkit a dire che ci si mette meno a chiamare GMP in Java, è pieno di esempi su internet proprio sul tuo stesso algoritmo.



Se vuoi trollare su Java fallo bene, non farlo su un argomento dove Java almeno ci prova ad implementare i decimali, mentre il brontosauro C++ alza le mani ancora prima di partire.


Il 28/01/19 14:16, 4ndre4 ha scritto:


A parte il fatto che saranno affari miei visto che la lib std del c++ 

non ha una serie di classi per gestire i db.

Comunque,proprio perche sono magnanimo, rispondero.

Io uso delle classi nel namespace data fatte da me.

Per leggere un valore da un recordset non e' come jdbc che si specifica 

il tipo in cui si vuole mettere il valore ma il valore letto va a finire 

in un oggetto di tipo variant

E' una classe che puo contenere tutti i tipi base, i tipi di un db ed 

altri definiti dall'utente.

Poi si estrae una stringa dal variant (indipendentemente dal tipo 

contenuto) oppure lo si converte nel tipo voluto

Se la conversione non e' possibile viene generata una eccezione.

Il tipo voluto puo essere una classe per gestire i bigdecimal (da me si 

chiama number) anche se il tipo contenuto nel variant e' un semplice int.

Basta che sia compatibile con un number.

Ovviamente non mi rompere i marroni piu di tanto,visto che so che 

inizierai a criticare anche questo.










 



Trolla tu va,c++ non alza le mani proprio un bel niente.

E brontosauri saranno magari COBOL,PLI,FORTRAN e similia

Non un linguaggio che ad oggi e' molto usato ed e' moderno come 

progettazione sw.






Il 28/01/19 14:14, 4ndre4 ha scritto:


Sei pure capace a rigirare le frittate

Io ho scritto di compilatore che genera un codice intermedio

Ora rispondi:

e' vero o no che il compilatore java genera un codice intermedio e non 

assembly ?

E' vero il JIT ha solo a che fare con una sorta di compilazione eseguita 

a runtime e che nulla ha a che fare con il compilatore discusso sopra ?



Non voglio sentire menate,rispondi solo si o no

Un consiglio,non cercare di fare la figura di quello che si sputtana 

davanti agli altri solo per darmi torto.

Anche se qui con tutti i viziati che ci sono in questo ng sarebbero 

capaci di darti ragione anche se scrivi megacappelle pur di dare torto a me.




 E' facile dire che java e' veloce quando si appoggia a c



francamente è un aspetto di cui frega un cazzo, come a qualsiasi altro 

normodotato. giusto un demente potrebbe pensare che siccome si usano 

librerie esterne native scritte in altri liguaggi allora fermi tutti, 

squisio, così non vale. 

ti ricordo che fare a chi se lo tira di più è un *tuo* chiodo fisso. 


 non ha una serie di classi per gestire i db.



Cosa c'entrano i db? Ma e` mai possibile che tu non capisca mai un cazzo? Ti e` stato detto che tipo a precisione multipla usi in C++ per memorizzare un valore numeric. 

Fai veramente cadere le braccia.


 Non e' cosi  per java,python,perl.ecc..



Si`, certo, continua ad arrampicarti sugli specchi.


 davanti agli altri solo per darmi torto.



Io mi sputtanerei? Guarda, detto da te, con la storia che ti sei costruito in questo ng, e con la reputazione da demente che ti porti dietro, ci vuole un bel coraggio. 


 Tu non mi ha detto dove stavano i dati



Certo che te l'ho detto: in una colonna numerica di una tabella di un 

data-base relazionale in cui il limite di precisione di un campo di tipo 

numeric sia di almeno 515 cifre.

Serve sapere altro?

In Java non serve, basta il nome della tabella ed il nome del campo, se 

poi usi un ORM, neanche quello.

Tu preoccupati di rispondere alla domanda: in c++, che tipo usi?




 inizierai a criticare anche questo.



Tu pensi davvero che la tua metodologia non sia passibile di critiche?


 E' facile dire che java e' veloce quando si appoggia a c



Di fatto e' una delle principali caratteristiche del Java.

E togliti dalla testa che il jni sia 'un ulteriore strato', nel senso 

che non e' 'ulteriore', e' lo stesso strato su cui si basano i programmi 

nativi.




 Dai, avanti, sparane ancora di puttanate, Sam!



cit. hunphrey bogart: 'suonala ancora, sam'

cit. woody allen: 'provaci ancora, sam'

:-D


 



Se tutti sostengono che scrivi cazzate, secondo te lo fanno per il

piacere di darti torto oppure, magari, lo fanno proprio

perchè tu *veramente* scrivi cazzate?




 





Non metterti a fare i giochetti sporchi con me che sono ben piu esperto 

di te di c e c++

Io non ho mai affermato che c++ e' compatibile al 100% con c e conosco 

bene le differenze tra i due linguaggi.

Ma il tuo giochetto e' facile da capire,vuoi dimostrare che poiche c++ 

non e' c allora si appoggia su librerie a lui estranee e quindi poiche 

lo fa lui allora lo puo fare anche java.

Sbagliato.

Prendi il tarball source di libgmp e basta adattare nei punti di 

richiesti le (poche) incompatibilita e viene generata una libgmp con 

prestazioni  pressoche uguali alla libgmp fatta in c.

Questo non e' possibile in java,per fare  libgmp a java occorre 

pressoche riscriverle da zero senza contare che il .so te lo puoi scordare.



 



Anche a me frega ben poco

In un programma normale bigdecimal lo si usa con 10/20 cifre decimali al 

massimo.

La differenza di tempi e' quindi irrilevante rispetto a libgmp.

Ma questo e' un solo un benchmark per dimostrare le differenze di 

prestazioni.

Cerco che se vuoi calcolare qualche miliardesima cifra di PI od E o 

qualunque algoritmo  che richiede un uso intensivo di grossi numeri 

potrebbe non essere l'optimum usare java anche se si usano le libgmp.

Lo strato jni porta via tempo e gli oggetti devono venire creati nello 

heap,per forza,mentre c++ va diretto a chiamare routine con entry c e 

non serve allocare nello heap se non nei casi in cui serve veramente.

Potrebbe anche non essere rilevante questo overhead in piu,dipende dall' 

algoritmo che si vuole eseguire.

Ma una cosa e' certa,non puo certo essere piu veloce od uguale a 

prestazioni a c++ proprio per le ragioni scritte sopra.




 

E' solo uno strato che serve per comunicare con c.

Che lo facciano altre classi di sistema e' irrilevante.






Il 28/01/19 16:41, 4ndre4 ha scritto:


Basta che vi mettiate d'accordo tu ed il dottore su cosa volete sapere.




 Tu pensi davvero che la tua metodologia non sia passibile di critiche?



E tu lo sai che continui a fare lo spiritoso ?

Sei stato tu a rompere i marroni su un qualcosa che e' irrilevante ai 

fini del benchmark.

Volevi sapere e ti ho risposto.

Dovresti ringraziarmi che sono stato magnanimo.




Il 29/01/19 02:14, Dr.UgoGagliardelli ha scritto:


Tu hai scritto:

Se da una tabella devi prelevare una colonna numeric(515, 512)



A casa mia una tabella puo stare in un db,in un file,in uno spreadsheet 

come excel o altro.




 



Intanto la sputtanata l'hai fatta.

Non preoccuparti,sara irrilevante.

Qui nessuno verra a scriverti che hai scritto una emerita stronzata,sono 

tutti faziosi come te !!






Il 29/01/19 06:31, Madame Damentami ha scritto:


Qui ce ne un altro.

Ma sei capace di comprendere il senso degli scritti o scrivi solo perche 

la mamma ti ha dotato un piccolo cervellino che ha appena imparato a 

scrivere ?




 non e' c allora si appoggia[...]



LOL :) No, demente, voglio semplicemente SOTTOLINEARE, non "dimostrare" (in quello riesci benissimo da solo) che sei un totale incompetente e di Java, e di C++, e di C. 



Con "C++ e` C", hai pestato il merdone massimo.


 E' uno dei motti di java.



LOL :D

Cioe`, secondo il tuo cervello bacato, il motto "Write once, run anywhere" sarebbe invalidato dal fatto che Java si possa poggiare a librerie C? Tu di programmazione non capisci veramente un cazzo.


 Anche a me frega ben poco 



allora siamo a posto.


 tutti faziosi come te !!



Non so se ha scritto una stronzata.

Con lui uso il metodo statistico.

Su 100 lanci in genere sta sempre un po sopra al 50

Sto studiando se la cosa e' sistematica!

;-)

In compenso mi hai dato la notizia che sa girar frittate.

A me vengono sempre bruciate cerchero' di /affittarlo/

per risolvere il problema.

;-)

-- 

ac (x=y-1)

Aborro il Killfile

(La violenza e' l'ultimo rifugio degli incapaci -Salvor Hardin-)


 



Nessun merdone

Io ho semplicemente scritto quello che e' vero.




Il 29/01/19 14:59, 4ndre4 ha scritto:


Ma davvero ?

IL motto di java e' proprio compilo una volta e porto i .class sulla 

macchina che mi pare,basta ci sia il runtime compatibile come versione.

Con un c di mezzo gia il write once va a farsi benedire,occorre almeno 

ricompilare sperando che la piattaforma sia supportata.










 ;-)



Le frittate le gira,eccome

Poi taglia le frasi di altri a sua comodita

Ho fatto solo 2 affermazioni:

il compilatore non genera codice nativo ed a runtime vengono eseguite 

alcune ottimizzazioni.

Se conosci un po di java puoi darti una risposta e capire subito chi 

scrive puttanate.




 E' uno dei motti di java.



Ovviamente il motto e' riferito a programmi 100% pure Java. D'altra 

parte nelle librerie distribuite col jdk o col jre, e' pieno di metodi 

'native'. Ovvio che ci si debba scontrare con il porting delle librerie 

native, ma e' un problema delle librerie non del Java.






 Qui ce ne un altro.

Tutti della 'banda java'? Come fai a continuare a stupirti?






Il 29.01.2019 21.04, enoquick ha scritto:


Vedi che glissi e non rispondi?

Indifferentemente, dovunque stia la tabella, poi coi tuoi variant riesci 

a farci i conti?


 Che non abbia scritto di JIT non significa che non so cosa sia.



Viscido paraculo bugiardo. Sai benissimo a cosa ti riferivi. Hai menzionato il pcode di Pascal che non c'entra una mazza. Volevi sottolineare che il compilatore non genera codice nativo. Volevi sottolineare che il codice prodotto non e` performante come il codice C++. Dai, che ormai ti conosciamo, mascherina. Il JIT non lo hai menzionato perche` non lo conosci e perche` non ti avrebbe fatto comodo menzionarlo. 



Qui dentro, non sono io che mi sputtano, sei tu. Secondo te perche` ti sei meritato l'etichetta di paraculo? Perche` quello che rigira le frittate sei proprio tu. Non ci provare a proiettare le tue qualita` sugli altri.


 Che non abbia scritto di JIT non significa che non so cosa sia.





 Non so se ha scritto una stronzata.



To`, s'e` risvegliato il lombrico. Non lo sai perche` non hai i mezzi per saperlo.


 alcune ottimizzazioni.



Non conosci Java. Non cercare di spiegare come funziona cio` che non conosci.




 Io ho semplicemente scritto quello che e' vero.



"C++ e` C" non e` un'affermazione vera, non importa quante volte tu batta i pugnetti sul tavolo. 

Viscido bugiardo, paraculo incompetente.


 



Che bella svicolata! Continua così, non fai altro che confermare

il tuo livello di (in)competenza in campo informatico (per carità,

non ci sarebbe nulla di male, se tu fossi in grado di riconoscere

e accettare i tuoi limiti), ma soprattutto le tue solide argomentazioni

sulla mamma, sulle dimensioni del cervello altrui sono l'evidenza della

mancanza totale di argomentazioni e dell'incapacità di rapportarsi

all'interno di un discorso tra persone civili. Detto questo, continua

pure a scrivere idiozie fuori luogo e a fare la figura del babbeo.=




 ricompilare sperando che la piattaforma sia supportata.



E continui a pestare merdoni, eh? Perche` continui a farti del male a questo modo?

Ma davvero vorresti mettere in discussione la portabilita` di Java con le tue stupidaggini?

Peraltro cantando le lodi di un linguaggio come C++ che e` non portabile per definizione?

Ti piace proprio renderti cosi` ridicolo? Poi prendi merda e accusi gli altri di essere faziosi e di avercela con te?



Se sulla piattaforma A ho il runtime X, su B ho il runtime Y, e su C ho il runtime Z, e se X, Y e Z implementano una specifica versione di Java, io non ho bisogno di riscrivere il mio codice per A, per B e per C. E` un ENORME vantaggio rispetto ad altri linguaggi. Quale C di mezzo che invaliderebbe il tutto? 



Sarebbe come dire che la possibilita` di usare la stessa spina elettrica in tutta Europa va a farsi benedire se dentro la presa sul muro c'e` un impianto elettrico specifico in ogni paese.



Con C e C++, hai il problema esattamente contrario: lo standard non copre volutamente certe aree (undefined behaviour, unspecified behaviour, implementation-defined behavior) proprio per lasciare spazio agli implementatori, ma questo comporta che gli header C/C++ siano letteralmente infognati di #ifdef per gestire sistemi specifici.



E tu hai il coraggio di buttare merda sulla portabilita` di Java? Non capisci veramente un cazzo. Per dire, basterebbe aver usato una volta l'Adapter pattern nel proprio codice, per comprendere il concetto. Roba che tu non ti sei mai neanche sognato di fare, chiaramente.


 Tutti della 'banda java'? Come fai a continuare a stupirti?



Ma com'e` che entrano tutti nella banda java? Com'e` che nella banda enoquick non entra nessuno?


 (vs 2015) 



Tie`, magari hai voglia di leggere questo: 



https://blogs.msdn.microsoft.com/vcblog/2015/06/19/c111417-features-in-vs-2015-rtm/




Mi dici come ti chiami e che lavoro fai? Cosi` guardo il tuo profilo LinkedIn.




Il 29/01/19 23:13, Dr.UgoGagliardelli ha scritto:


Converti il variant nel tipo numerico voluto (anche number) e fai tutti 

i conti che vuoi






 Converti il variant nel tipo numerico voluto (anche number)



Non puoi, perche` quel tipo, in C++, non ce l'hai. Una cosa che Ugo sta cercando di farti capire da giorni, capra. Se hai un valore numerico a precisione multipla memorizzato in un db, in C++ lo puoi solo leggere come stringa. E poi che ci fai? Un calcolo come lo esegui?




Il 30/01/19 04:36, 4ndre4 ha scritto:


Invece che saper discutere e darmi del pazzo paranoico ti dico che non 

basta implementare le future richieste dallo std per essere nello std

Ci sono molti altri aspetti in c++ che tu ovviamente ignori

Un aspetto e' la two phase name lookup (che scommetto che non sai 

neanche cosa sia,ma e' una supposizione)

Fino a visual c++ in visual studio 2015 la two phase name lookup non era 

aderente agli std.

Lo e' da visual c++ implementata in visual studio 2017 (esiste comunque 

uno switch per tornare alla vecchia modalita utile per il codice legacy)

Non sono io ad affermare queste cose ma la stessa MS:



https://blogs.msdn.microsoft.com/vcblog/2017/09/11/two-phase-name-lookup-support-comes-to-msvc/






Ora,ti devo fare la traduzione dei pezzi piu interessanti o te lo leggi 

e lo comprendi da solo ?



Questa invece e' una mia nota

La two phase name lookup e' abbastanza vecchiotta

E' stata introdotta con c++11 e in g++ e' stata subito implementata.

MS ha aspettato visual studio 2017 per implementarla tanto che lo switch 

tra vecchia modalita e nuova in visual studio 2015 e precedenti non esiste.

Chiunque abbia un visual studio 2015 o precedenti lo sfido a trovare lo 

switch conformance mode,non esiste.

In visual studio 2017 e' in C/C++ language

Io lo so perche' visual studio lo uso, e per lavoro, mica come te che 

sai solo blaterare,cercare su internet e darmi del pazzo paranoico.




Il 29/01/19 15:08, rootkit ha scritto:


Tutto qui quello che hai da dire ?




Il 29/01/19 22:58, Dr.UgoGagliardelli ha scritto:


Ovviamente,l'appunto era solo sul fatto che se si introduce una lib 

nativa non di sistema ms mina la portabilita

Questo non perche non sia possibile scrivere codice portabile in C,e' 

possibile ma occorre piu riguardo rispetto a java.




Il 30/01/19 07:36, 4ndre4 ha scritto:


Tu non hai mai costruito classi per accedere ai db a quanto sembra.






 nativa non di sistema ms mina la portabilita



no.



si tratta di utilizzare una libreria runtime esterna, stop. nessun problema di

portabilità. il programma gira su tutte le piattaforme dove è disponibile la libreria,

siccome la libreria gmp è disponibile per tutte le piattaforme il problema non

esiste.



inoltre, per piacere, abbozzala con questa jni. possibile che non perdi occasione di

dimostrare incompetenza in materia?

https://en.wikipedia.org/wiki/Java_Native_Access



Il 30/01/19 02:17, Madame Damentami ha scritto:


Mi sembra che le argomentazioni sia tu a non rispettarle visto che non 

fai altro che seguire il gregge.

Se ritieni che abbia scritto puttanate scrivi le motivazioni








Il 30/01/19 08:48, rootkit ha scritto:


La discussione non era su gmp ma su  una generica lib scritta in c e non 

di sistema




 di sistema



si certo, naturalmente la discussione la vuoi come fa comodo a te.

finché ti fa comodo discuti di gmp e BigDecimal, poi quando ti si fa notare che anche

in java puoi utilizzare agevolmente gmp ecco che improvvisamente non si discute

più di gmp.



Se vuole ragione dategli ragione. Ho quasi finito i pop corn!



-- 

The three most dangerous things in the world are a programmer with a 

soldering iron, a hardware type with a program patch and a user with an 

idea.



Beh, quando succede che servano, e' preferibile utilizzare un linguaggio 

che non ne abbia bisogno.

Saranno 20 anni che non uso piu' c/c++ quando si tratta di accedere ai 

db, trattandosi che anche elaborare un banale numeric(15, 5) succhia 

piu' risorse di quanto meriti.

E' da mo' che ho smesso di di alimentare dei personal farmework.




 Tu non hai mai costruito classi per accedere ai db a quanto sembra.



Scriversi le proprie classi per accedere ai dati e` una idiozia sesquipedale. D'altronde cosa c'e` di interessante nell'incapsulare chiamate al driver nel proprio "framework"?

Di ORM ne esistono in qualunque linguaggio, persino C++. Ma tu, essendo un totale incompetente, non sai neanche che una tale tecnologia esista e reinventi la ruota esagonale.

Non hai risposto alla domanda: con cosa li fai i calcoli in precisione mobile in C++?




 neanche cosa sia,ma e' una supposizione)



Supponi male, rimbambito. Io ho usato piu` implementazioni C/C++ di quante tu ne possa mai utilizzare in dieci delle tue misere vite professionali. Te li ho elencati in passato; non farmi ripetere le stesse cose. Continui ad attaccarti a strawmen arguments. Sei un patetico, viscido paraculo: quando non sai rispondere, ignori la domanda; quando vieni messo alle strette, costruisci un argomento fantoccio e lo attacchi. Vergognati.


 E' da mo' che ho smesso di di alimentare dei personal farmework.



che poi di che sta parlando? tutti i principali database a partire da 

oracle (ocilib) hanno (ovviamente) delle api di alto livello. davvero non 

si capisce da che pianeta è cascato.


 possibile ma occorre piu riguardo rispetto a java.



Riguardo? Le cose dille bene: richiede molto piu` sforzo.




Il 30/01/19 09:06, rootkit ha scritto:


Non si tratta di rivoltare le frittate

Ce gia chi lo fa molto bene

Se non ci credi vai a leggere i post




 Non si tratta di rivoltare le frittate



Coda di paglia eh? :)


Il 30/01/19 12:26, 4ndre4 ha scritto:


Ai scoperto l'acqua calda

Comunque la portabilita C non e' quel demone che vuoi fare credere.

In C++ poi il codice non portabile lo si incapsula in classi.

La maggior parte del codice e' ragionevolmente  portabile.




Il 30/01/19 12:12, 4ndre4 ha scritto:


Ovviamente le uniche cose che sai fare e' insultare e tagliare le parti 

che te non convengono




Il 30/01/19 12:15, rootkit ha scritto:


Quali api ha oracle di alto livello ?




Il 30/01/19 12:07, 4ndre4 ha scritto:


Strascrivi proprio perche la mamma ti ha insegnato a scrivere.

Quelle classi sono abbastanza vecchiotte poi adattate a c++11

All'epoca non esisteva un framework di classi abbastanza flessibile per 

accedere ad un db.

Oggi magari esiste,non lo so,non mi sono mai informato su questo.

I calcoli li fai come li fai usando java

Con un double ad esempio.






 le frittate sei proprio tu



Insomma siete in due?

Chi e' piu' bravo?

Io continuo a bruciarle e non mi salva neanche Java!

Ti immagino, quando tu dovessi scrivere una riga di codice,

valutare quanti picosecondi ci mette un a++ invece di a+1

Non  mi ricordo neanche piu' se a++ in java e' consentito

ma, capisco, un picosecondo e' un picosecondo risparmiarne

1 e' una /zaganella/ di tutto rispetto!



-- 

ac (x=y-1)

Aborro il Killfile

(La violenza e' l'ultimo rifugio degli incapaci -Salvor Hardin-)


 un discorso tra persone civili



Dove? Da quando?

