Sunday, March 5, 2017

C# Decimal Vs Float/Double

Facts

Float Type: 32 bit floating point number in the range from approximately 
1.5 × 10−45 to 3.4 × 1038 with a precision of 7 digits.

Double Type: 64 bit floating point number in the range from approximately 
5.0 × 10−324 to 1.7 × 10308 with a precision of 15-16 digits.

Decimal Type: 128 bit floating point number in the range from approximately 
1.0 × 10−28 to 7.9 × 1028 with 28-29 significant digits.

When to use decimal, when to use float/double?

  • Use decimal for counted values (like money, scores)
  • Use float/double for measured values (like distance)

Microsoft CSharp Language Specification of decimal type

The decimal type is a 128-bit data type suitable for financial and monetary calculations. The decimal type can represent values ranging from 1.0 × 10−28 to approximately 7.9 × 1028 with 28-29 significant digits.

The finite set of values of type decimal are of the form (–1)× c × 10-e, where the sign s is 0 or 1, the coefficient c is given by 0 ≤ c < 296, and the scale e is such that 0 ≤ e ≤ 28.The decimal type does not support signed zeros, infinities, or NaN's. A decimal is represented as a 96-bit integer scaled by a power of ten. For decimals with an absolute value less than 1.0m, the value is exact to the 28th decimal place, but no further. For decimals with an absolute value greater than or equal to 1.0m, the value is exact to 28 or 29 digits. Contrary to the float and double data types, decimal fractional numbers such as 0.1 can be represented exactly in the decimal representation. In the float and double representations, such numbers are often infinite fractions, making those representations more prone to round-off errors.

If one of the operands of a binary operator is of type decimal, then the other operand must be of an integral type or of type decimal. If an integral type operand is present, it is converted to decimal before the operation is performed.

The result of an operation on values of type decimal is that which would result from calculating an exact result (preserving scale, as defined for each operator) and then rounding to fit the representation. Results are rounded to the nearest representable value, and, when a result is equally close to two representable values, to the value that has an even number in the least significant digit position (this is known as “banker’s rounding”). A zero result always has a sign of 0 and a scale of 0.
If a decimal arithmetic operation produces a value less than or equal to 5 × 10-29 in absolute value, the result of the operation becomes zero. If a decimal arithmetic operation produces a result that is too large for the decimal format, a System.OverflowException is thrown.


The decimal type has greater precision but smaller range than the floating-point types. Thus, conversions from the floating-point types to decimal might produce overflow exceptions, and conversions from decimal to the floating-point types might cause loss of precision. For these reasons, no implicit conversions exist between the floating-point types and decimal, and without explicit casts, it is not possible to mix floating-point and decimal operands in the same expression.

ref: C# Language Specification 5.0

Wednesday, March 1, 2017

PL/SQL Giving sys.DBMS_LOCK Execution Permission To a User

To be able to use sys.dbms_lock a user should have been granted execution.

begin
 DBMS_LOCK.Sleep( 60 );
end;
PLS-00201: identifier 'DBMS_LOCK' must be declared
To grant execution to user:
grant execute on <object> to <user>;
sqlplus / as sysdba
grant all on sys.dbms_lock to user;




Setting listener.ora in Linux

To set up listener.ora file in linux follow these steps:

  • change directory to oracle folder then network and admin folders consequtively: 
    • cd /u01/oracle/product/11.2.0.4/db_1
    • cd network
    • cd admin
  • run su command enter password (needed to edit listener.ora). open listener.ora to edit in your favorite editor. I used gedit:
    • su
    • gedit listener.ora
  • configure listener.ora file (you need to set up HOST, PORT, ORACLE_HOME, SERVICE_NAME), here is a sample file configured for my needs:
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.201)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))    
    )
  )

SID_LIST_LISTENER = 
(SID_LIST = 
 (SID_DESC = 
(ORACLE_HOME = /u01/oracle/product/11.2.0.4/db_1/)
(SID_NAME = ORACLEVM)
(SERVICE_NAME = ORACLEVM)
(GLOBAL_NAME = ORACLEVM)
 ) 

ADR_BASE_LISTENER = /u01/oracle


  • stop ans start listener by using these commands:
    • lsnrctl stop
    • lsnrctl start

Accessing a VMware Player (Workstation 12) machine from network

To be able to access a VMware Workstation 12 Player machine (to receive a ping request at least) follow these steps:
  • Open virtual machine settings from player -> manage -> virtual machine settings and click network adapter tab


Setting a Static IP for Red Hat Enterprise Linux Server

  To set a static Ip in Red Hat Enterprise Linux Server follow the steps below:

  • Open a terminal 
  • run this command to change directory to list network interfaces
    • cd /etc/sysconfig/network-scripts/
    • ls

  • We need to edit the network interface file starting with ifcfg-enolxxxx. To be able to edit the file, first we need to run su. Run these commands:
    • su
    • gedit ifcfg-eno16777736


  • Change these parts accordingly and save it:
        IPADDR=192.168.1.201
        GATEWAY=192.168.1.1
        DNS1=192.168.1.227