On Saturday, 13 January 2018 at 14:43:53 UTC, rumbu wrote:
I received a suggestion to reorganize the file structure because of some bug in dub (https://issues.dlang.org/show_bug.cgi?id=11847). The dub.json remained out of sync.


I changed it, but I am not 100% sure that it's working. I am not experienced with dub, If someone wants to maintain dub.json, I will be more than happy to accept any pull request.

I can compile/run the nosine.d now. But implicit conversion between decimalX and float/double/real does not seem to work. I came across this in

sinus.d
```
import std.stdio;
import std.math;
import decimal;

void main ()
{
   real r;
   for (r = 1; r < 6; r += .1L) {
      decimal128 d = r;
      auto dsin = sin (d);
      auto rsin = sin (r);
      real delta = dsin - rsin;
      writefln ("%9.2f %30.24f %12.4g", r, rsin, dsin, delta);
   }
}
```

$ dmd sinus.d decimal.git/libdecimal.a
sinus.d(12): Error: cannot implicitly convert expression dsin.opBinary(rsin) of type Decimal!128 to real

I tried to change the subtraction to

```
      real delta = dsin;
      delta -= rsin;
```

getting

sinus_e1.d(12): Error: cannot implicitly convert expression dsin of type Decimal!128 to real

Changes this into

```
      real delta = dsin.to!real;
      delta -= rsin;
```
sinus_e2.d(12): Error: template decimal.to cannot deduce function from argument types !(real)(Decimal!128), candidates are: decimal/package.d(5814): decimal.to(T, D)(auto ref const D x, const RoundingMode mode) if (isIntegral!T && isDecimal!D) decimal/package.d(5832): decimal.to(F, D)(auto ref const D x, const RoundingMode mode) if (isFloatingPoint!F && isDecimal!D)


to no avail. Also

```
      real delta = cast(real) dsin;
```

did not succeed:

decimal/package.d(933): Error: undefined identifier mode, did you mean template modf(D)(auto ref const D x, ref D y) if (isDecimal!D)? sinus_e3.d(12): Error: template instance decimal.Decimal!128.Decimal.opCast!real error instantiating

Also

```
      real delta = dsin.to!(real, RoundingMode.tiesToEven);
```

ain't work:
sinus_e4.d(12): Error: template decimal.to cannot deduce function from argument types !(real, cast(RoundingMode)0)(Decimal!128), candidates are: decimal/package.d(5814): decimal.to(T, D)(auto ref const D x, const RoundingMode mode) if (isIntegral!T && isDecimal!D) decimal/package.d(5832): decimal.to(F, D)(auto ref const D x, const RoundingMode mode) if (isFloatingPoint!F && isDecimal!D)

How can I convert a decimalX to float/double/real?

Reply via email to