[CLN-list] confusion with cln::cl_F and cln::cl_R
Alexei Sheplyakov
alexei.sheplyakov at gmail.com
Tue May 18 22:37:49 CEST 2010
Hello,
On Tue, May 18, 2010 at 11:22:25AM -0400, Joshua Friedman wrote:
> The program runs when I define "bigF = cln_R", but I get errors when I set
> "bigF = cln_F"
> I found that the exponential function only gives many digits of precision
> when I use cln_F.
> I am attaching my program and the out put is below:
[skipped]
Here's a simpler example which illustrates the problem.
$ cat noconv.cc
#include <cln/cln.h>
cln::cl_F foo(const cln::cl_F& x)
{
cln::cl_F one = 1;
return one;
}
This code won't compile because CLN does not provide implicit conversion
of exact numbers (such as integers) into inexact ones (i.e. floating
point ones):
g++ -c noconv.cc `pkg-config --libs --cflags cln`
noconv.cc: In function ‘cln::cl_F foo(const cln::cl_F&)’:
noconv.cc:5: error: conversion from ‘int’ to ‘cln::cl_F’ is ambiguous
/home/varg/target/x86_64-linux-gnu/include/cln/float_class.h:38: note: candidates are: cln::cl_F::cl_F(cln::cl_anything*) <near match>
/home/varg/target/x86_64-linux-gnu/include/cln/float_class.h:26: note: cln::cl_F::cl_F(const char*) <near match>
/home/varg/target/x86_64-linux-gnu/include/cln/float_class.h:48: note: cln::cl_F::cl_F(double)
/home/varg/target/x86_64-linux-gnu/include/cln/float_class.h:47: note: cln::cl_F::cl_F(float)
One should use an appropriate cl_float function, i.e.
#include <cln/cln.h>
cln::cl_F foo(const cln::cl_F& x)
{
cln::cl_F one = cln::cl_float(1, x);
// Constructs a floating-point number representing 1 with the same
// mantissa size as that of x
return one;
}
I admit this is a bit annoying, but debugging issues due to implicit
conversions is even more annoying.
Best regards,
Alexei
More information about the CLN-list
mailing list