|
Página 1 de 1
|
Operaciones Con Precisión Cuádruple De 128-bit Con Números En Coma Flota...
Autor |
Mensaje |
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Operaciones Con Precisión Cuádruple De 128-bit Con Números En Coma Flotante A Través De La Librería Quadmath.h
...compartiendo esta pagina, que escribí, del WIKI del foro italiano:
http://www.gambas-it.org/wiki/index...eria_quadmath.h
última edición por vuott el Sabado, 22 Octobre 2016, 23:23; editado 2 veces
|
#1 Sabado, 22 Octobre 2016, 23:13 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Operaciones Con Precisión Cuádruple De 128-bit Con Números En Coma Flotante A Través De La Librería Quadmath.h
Gracias Vuott.
=================== No podemos regresar
|
#2 Domingo, 23 Octobre 2016, 02:19 |
|
|
razaAztk
aztk crux
Analista Programador
Registrado: Enero 2010
Mensajes: 340
Edad: 35 Ubicación: Tenochtitlan
|
Re: Operaciones Con Precisión Cuádruple De 128-bit Con Números En Coma Flotante A Través De La Librería Quadmath.h
Excelente vuott!!!! Gracias.
Con tu implementación he podido hacer un mayor cálculo de lo que el otra vez se discutió acerca del número ideal de mujeres ( https://foro.gambas-es.org/viewtopic.php?f=8&t=5865#p34874 ). Que con el tipo de dato float de gambas (que son 8 bytes) sólo se podían tener 170 dificultades y ahora son 10 veces más (1755 dificultades).
' gambas module file
Library "/tmp/libfloat128q"
' char * Float128q(int dcm, char *num1, char *num2, char *opera)
' La funzione contenuta nella nostra libreria dinamica per la gestione delle risorse della libreria esterna "quadmath.h"
Private Extern Float128q(dcm As Integer, num1 As String, num2 As String, opera As String) As String
Public Const e As Float = 2.7182818285
Public Const pi As Float = 3.1415926535
Public operazione As String[] = ["add", "sot", "mol", "div"]
Public Sub Main()
Dim ver, s As String
Dim n As Integer = 1755 ' 170 '' donde n son el numero de dificultades
Dim y As String '' donde y es el total de mujeres para ti
' Cerca la cartella della versione di gcc contenente il file header "quadmath.h":
ver = Versione()
' Va a creare la nostra apposita libreria dinamica esterna .so per la gestione delle risorse della libreria esterna "quadmath.h":
CrealibFloat128q(ver)
y = Float128q(64, Float128q(64, factorial(n), CStr(Sqr(2 * Pi * n)), operazione[3]), power((n / e), n), operazione[3])
Print "\nNumero máximo de mujeres recomendable: "; Val(y)
End
Private Function Versione() As String
Dim dd As String[]
Dim percorso, d As String
percorso = "/usr/lib/gcc/x86_64-linux-gnu/"
dd = Dir(percorso, Null, gb.Directory).Sort(gb.Descent)
For Each d In dd
If Exist(percorso &/ d &/ "quadmath.h") Then Exit
Next
Return d
End
Private Procedure CrealibFloat128q(v As String)
' Scrive il codice sorgente della nostra apposita libreria dinamica esterna:
File.Save("/tmp/libfloat128q.c", "#include </usr/lib/gcc/x86_64-linux-gnu" &/ v &/ "include/quadmath.h>\n" &
"#include <stdio.h>\n" &
"#include <string.h>" &
"\n\n" &
"char buf[128];" &
"\n\n\n" &
"char * Float128q(int dcm, char *num1, char *num2, char *opera) {" &
"\n\n" &
" char str[4];\n" &
" char dest[16] = \"%+-#*.\";\n" &
" __float128 fl1, fl2, ris;" &
"\n\n\n" &
" sprintf(str, \"%d\", dcm);\n" &
" strcat(dest, str);\n" &
" strcat(dest, \"Qe\");" &
"\n\n" &
" fl1 = strtoflt128(num1, NULL);\n" &
" fl2 = strtoflt128(num2, NULL);" &
"\n\n" &
" if (strcmp(opera, \"add\") == 0 ) {\n" &
" ris = fl1 + fl2;\n }" &
"\n\n" &
" if (strcmp(opera, \"sot\") == 0 ) {\n" &
" ris = fl1 - fl2;\n }" &
"\n\n" &
" if (strcmp(opera, \"mol\") == 0 ) {\n" &
" ris = fl1 * fl2;\n }" &
"\n\n" &
" if (strcmp(opera, \"div\") == 0 ) {\n" &
" ris = fl1 / fl2;\n }" &
"\n\n\n" &
" quadmath_snprintf(buf, 128, dest, ris);"
"\n\n" &
" return buf;\n\n}")
' Genera la nostra apposita libreria dinamica esterna:
Shell "gcc -o /tmp/libfloat128q.so /tmp/libfloat128q.c -shared -fPIC -lquadmath" Wait
End
Public Function factorial(val As Integer) As String
Dim i As Integer
Dim y As String = "1"
For i = 1 To val
'y *= i
y = Float128q(64, y, CStr(i), operazione[2])
Next
Return y
End
Public Function power(x As Float, z As Integer) As String
Dim i As Integer
Dim y As String
Dim yy As String
yy = CStr(x)
y = yy
For i = 2 To z
y = Float128q(64, y, yy, operazione[2])
Next
Return y
End
última edición por razaAztk el Domingo, 23 Octobre 2016, 04:18; editado 1 vez
|
#3 Domingo, 23 Octobre 2016, 04:13 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Operaciones Con Precisión Cuádruple De 128-bit Con Números En Coma Flotante A Través De La Librería Quadmath.h
=================== No podemos regresar
|
#4 Domingo, 23 Octobre 2016, 10:48 |
|
|
Grandamakulo
Analista Programador
Registrado: Enero 2016
Mensajes: 311
Edad: 55 Ubicación: En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
|
Re: Operaciones Con Precisión Cuádruple De 128-bit Con Números En Coma Flotante A Través De La Librería Quadmath.h
Muchísimas gracias, Vuott.
PS.- Efectivamente, nos vamos acercando a... ¡1!
|
#5 Lunes, 24 Octobre 2016, 16:06 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Operaciones Con Precisión Cuádruple De 128-bit Con Números En Coma Flotante A Través De La Librería Quadmath.h
Es importante - por lo que atañe a los numeros de coma flotante - tener cuidado con el carácter separador de la parte entera y de la parte decimal: se debe usar el carácter "local".
Creo que todos nosotros neo-latinos usamos la coma (exemplum: 123,4567) y no el punto.
|
#6 Lunes, 24 Octobre 2016, 16:22 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Operaciones Con Precisión Cuádruple De 128-bit Con Números En Coma Flotante A Través De La Librería Quadmath.h
Os recuerdo que por lo atañe a los numeros enteros es posible usar los recursos del Componente gb.gmp:
http://gambaswiki.org/wiki/comp/gb.gmp
última edición por vuott el Lunes, 24 Octobre 2016, 23:57; editado 1 vez
|
#7 Lunes, 24 Octobre 2016, 23:57 |
|
|
razaAztk
aztk crux
Analista Programador
Registrado: Enero 2010
Mensajes: 340
Edad: 35 Ubicación: Tenochtitlan
|
Re: Operaciones Con Precisión Cuádruple De 128-bit Con Números En Coma Flotante A Través De La Librería Quadmath.h
Creo que todos nosotros neo-latinos usamos la coma (exemplum: 123,4567) y no el punto.
En México usamos el punto.
Saludos.
|
#8 Martes, 25 Octobre 2016, 15:59 |
|
|
razaAztk
aztk crux
Analista Programador
Registrado: Enero 2010
Mensajes: 340
Edad: 35 Ubicación: Tenochtitlan
|
Re: Operaciones Con Precisión Cuádruple De 128-bit Con Números En Coma Flotante A Través De La Librería Quadmath.h
Os recuerdo que por lo atañe a los numeros enteros es posible usar los recursos del Componente gb.gmp:
http://gambaswiki.org/wiki/comp/gb.gmp
Yo intenté usar ese componente pero me dio varios Fallas de segmento.
|
#9 Martes, 25 Octobre 2016, 16:01 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|