Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Operaciones Con Precisión Cuádruple De 128-bit Con Números En Coma Flota...
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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:    5badda398c3a95fd919c7e883699ceea

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 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuarioVer la galería personal del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
 
razaAztk escribió: [Ver mensaje]
y ahora son 10 veces más (1755 dificultades).

Os vais acercando, os vais acercando...       
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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!
 



 
Grandamakulo - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
 
vuott escribió: [Ver mensaje]

Creo que todos nosotros neo-latinos usamos la coma (exemplum: 123,4567) y no el punto.


En México usamos el punto.

Saludos.
 



 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuarioVer la galería personal del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
 
vuott escribió: [Ver mensaje]
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.
 



 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuarioVer la galería personal del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Acerca De La Precisión En Decimales (SOLU... santijav General 7 Lunes, 26 Diciembre 2011, 17:39 Ver último mensaje
santijav
No hay nuevos mensajes Precisión De Los Decimales Shell General 1 Domingo, 13 Julio 2014, 20:32 Ver último mensaje
jsbsan
No hay nuevos mensajes ¿punto O Coma Decimal? jsbsan Mundo Linux 11 Viernes, 01 Diciembre 2017, 02:34 Ver último mensaje
vuott
No hay nuevos mensajes Convertir Números A Números Romanos (1 A... v3ctor Aplicaciones/Fragmentos de Código 11 Domingo, 05 Abril 2020, 18:40 Ver último mensaje
v3ctor
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron