Thanks, I should have know about this, am looking into it, not sure if it 
is enough as it is not a subtype of FloatingPoint.

Another issue:

[I vaguely remember this having been asked before for types, but mine is a 
Number (actually a FloatingPoint), not sure if it matters.]

A.
Why is Dec right justified (and should it? How would I change it?):
julia> a=[D"1.100", D"1.1", D"2.1"]
3-element Array{Dec,1}:
 Dec("1.100")
   Dec("1.1")
   Dec("2.1")

[also it seems a little redundant to repeat the type when not a Union.]

unlike:
julia> a=[1.101, 1, 2]
3-element Array{Float64,1}:
 1.101
 1.0  
 2.0  

and even strings:
julia> a=["1.101", "1", "2"]
3-element Array{ASCIIString,1}:
 "1.101"
 "1"    
 "2"

B.
Note:
julia> D"Inf" #Both work in Python's Decimal:
Dec("Infinity")

And is this a problem (for Julia?):
julia> D"Infinity"===D"Infinity"
false

julia> D"Inf"===D"Infinity"
false

julia> D"Infinity"==D"Infinity"
false

Unlike:
julia> Inf===Inf
true

julia> Inf==Inf
true


C. Is print and the rest the right way:
Code:
module Dec_m ...

print(io::IO, x::Dec) = (write(io,x.n[:__str__]()); nothing)

function showcompact(io::IO, x::Dec)
  print(io, typeof(x))
  print(io, "(")
  showcompact(io, x)
  print(io, ")")
end

function showcompact(io::IO, x::Dec)
  show(io, x.n[:__str__]())
end

# can use D"literal number" as short for Dec("number"). Better to use lower 
case d?
macro D_str(s)
  Dec(s)
end

end

-- 
Palli.
On Monday, December 29, 2014 at 3:40:54 PM UTC, Jameson wrote:
>
> To see what function definitions are useful for implementing a basic 
> numeric type, you might want to peruse the FixedPointNumbers.jl source code 
> (https://github.com/JeffBezanson/FixedPointNumbers.jl) and work from that.
>
> On Mon Dec 29 2014 at 8:57:46 AM Páll Haraldsson <pall.ha...@gmail.com 
> <javascript:>> wrote:
>
>>
>> On Thursday, December 25, 2014 12:20:48 PM UTC, Páll Haraldsson wrote:
>>>
>>>
>>> Hi,
>>>
>>> This is my first useful Julia code so far. I should have probably 
>>> started with wrapping C-code for Decimal floating point. I'm a little 
>>> conflicted, I see that SymPi.jl doesn't wrap all of the Python code and I 
>>> thought you could call the rest of the functions that are missing also with 
>>> my code. Then if I change the implementation that wouldn't work.. Right? 
>>> Would macros help?
>>>
>>
>> I mean, I can do:
>>
>>  julia> a=D"1.1"
>> "1.1"
>>
>> julia> a.n[:radix]()
>> PyObject Decimal('10')
>>
>> There is no such thing as private or protected as in C++. I can even do:
>>
>> a.n=b.n
>>
>> When I wrap C code n will be a 64-bit bittype. And with different 
>> functions.. Should I do "abstract Decimal"? And implement C and Python 
>> types from that one? I want the C type to be a drop-in replacement (and not 
>> get runtime errors). I guess I can't have my cake and eat it too.
>>
>>
>>> Is there something missing to fully be Julian? Do not care about sin, 
>>> cos.. etc.
>>>
>>>  
>> Such as:
>>
>> julia> zeros(Dec, 2, 2)
>> ERROR: `convert` has no method matching convert(::Type{Dec}, ::Int64)
>>  in zeros at array.jl:169
>>
>> Seems to be the same issue as with:
>>
>> julia> mean([D"1.1" D"2.2"])
>> ERROR: no promotion exists for Dec and Int64
>>  in mean at statistics.jl:17
>>
>> I tried:
>> convert(::Type{Dec}, x::Int64) = Dec(x)
>>
>> In general what functions would I have to implement to get Decimal merged 
>> into Julia? Ideally it should be a drop-on replacement for other types. But 
>> is there at least a minimal "must-haves"? This is just an exercise for me 
>> for learning more about Julia (and Python..) and decimal floating (and 
>> fixed) point. 
>>
>> I think this is the C library I should wrap:
>> http://www.netlib.org/misc/intel/README.txt
>>
>> Then I found this one..:
>>
>> https://gcc.gnu.org/onlinedocs/gccint/Decimal-float-library-routines.html#Decimal-float-library-routines
>> "The software decimal floating point library supports either DPD (Densely 
>> Packed Decimal) or BID (Binary Integer Decimal) encoding as selected at 
>> configure time."
>>
>> Maybe there isn't too much interest, I do not even have use for decimal 
>> floating point. As I said, this is just an exercise for me, I just think 
>> Julia is incomplete without Decimal support.. I'm ok with just the basic 
>> operators I provided (+ average). I'm not sure how much Decimal would be 
>> used beyond basic financial stuff.
>>
>> As Julia is generic, maybe a lot will fall into place with just some few 
>> functions/conversions. I see that linear algebra even works now (except 
>> for):
>>
>> julia> [D"1.1" D"2.2"; D"1.1" D"2.2"]/[D"1.1" D"2.2"; D"1.1" D"2.2"]
>> ERROR: no promotion exists for Dec and Int64
>>  in istril at linalg/generic.jl:288
>>  in \ at linalg/dense.jl:411
>>  in Ac_ldiv_Bc at operators.jl:156
>>  in / at linalg/generic.jl:236
>>
>> julia> [1.1 2.2; 1.1 2.2]/[1.1 2.2; 1.1 2.2]
>> ERROR: SingularException(2)
>>  in \ at linalg/factorization.jl:815
>>  in \ at linalg/dense.jl:412
>>  in Ac_ldiv_Bc at operators.jl:156
>>  in / at linalg/generic.jl:236
>>
>> Let's say I wanted sin to work, I probably should it return float not 
>> Decimal? I think all the libraries convert to binary floating point and it 
>> seems just wasteful to change back. Would I have to implement sin, cos etc. 
>> or just have some promotion?
>>
>> julia> typeof(sin(BigInt(1)))
>> BigFloat (constructor with 14 methods)
>>
>>
>> https://github.com/quinnj/ODBC.jl/blob/master/src/ODBC_Types.jl
>>> typealias SQLDECIMAL Cdouble
>>> typealias SQLNUMERIC Cdouble
>>>
>>
>> This one is kind of a lie.. :) Along with:
>>
>> # Data Type Status: Pretty good, I think we're at 95% support, really 
>> only missing native date, time, interval, and GUID types (currently just 
>> read in as strings)
>>
>> # SQL_DECIMAL SQL_C_DOUBLE Float64
>> # SQL_NUMERIC SQL_C_DOUBLE Float64
>>
>> If most aggregates are handled in the SQL, Float64 might not be to bad 
>> for querying, otherwise this could be a problem. If I would change this to 
>> Decimal (that doesn't implement all functions) I would brake code.. I 
>> wander how much this has been used already..
>>
>> Best regards,
>>
>> -- 
>> Palli
>>
>

Reply via email to