Jadi sebaiknya harus merubah coding saya dong.
Apabila lihat funsgi vba-excel pakai object browser atau di help misal untuk
fungsi:

Function FileLen(PathName As String) As Long

Hasilnya adalah long. Padahal kalo dipikir-pikir apakah ada nama folder yang
panjangnya  2147483647 (batas atas data type long).

Tanya #1 : Apakah ini adalah salah satu cara agar prosesnya lebih cepat?

Sekalian tanya masalah alokasi memori:
Saya pernah mengolah data pengukuran pasang surut air laut untuk menentukan
prediksi pasang surut dengan menggunakan aplikasi fungsi matrix. 

Saya tulis di

http://cadex.wordpress.com/2009/12/18/xls-svy-01-prediksi-pasut-dengan-vba-e
xcel/

Dalam proses perhitungan tersebut akan dibuat matrix dengan dimensi matrix
sbb:

MatrixA(696,19),MatrixL(696),MatrixX(19)

Semuanya saya definisikan sebagai data type double di bagian declaration
Dim MatrixA() as double, MatrixL() as double ,MatrixX() as double

Tanya #2, Ada saran bagaimana mengatur alokasi memorin untuk menyimpan
matrix?

Mungkin bagi sebagian computer akan berjalan lebih lambat atau lebih cepat
dari laptop saya...

Tanya #3, Pada saat mengolah data 'pasang surut' tersebut awalnya saya
memakai fungsi matrix di excel: 
 
application.worksheetfunction.MMULT() dan .MINVERSE()

tetapi hasilnya error, mungkin karena fungsi di excel tidak bisa menghandle
dimensi matrix dimensi 696x696. apakah memang demikian?


Terimakasih
_zainul_


________________________________________
From: [email protected] [mailto:[email protected]]
On Behalf Of Mr. Kid
Sent: Sunday, February 28, 2010 12:04 PM
To: [email protected]
Subject: Re: [belajar-excel] kenapa INT((204.01 - 204) * 100) <> 1 ?

  
Untungnya, ini berbicara dalam VBA Excel.
Jadi, bisa dengan asumsi bahwa pengolahan tersebut (sebagian besar) adalah
proses ETL untuk mendapatkan data yang dibutuhkan.

Betul mas Zainul, Long dan Integer memiliki sifat yang sama sebagai datatype
bilangan bulat, dan itu hanyalah sebuah kebiasaan saya saja. Ceritanya
begini :

Untuk suatu data yang jumlah cacahnya banyak dan harus disimpan oleh
variabel itu dalam waktu lama (misal array bilangan bulat), maka sangat
penting memperhatikan datatype berdasar alokasi memorinya. 

Tetapi untuk kasus sebuah variabel yang hanya menyimpan sesaat (misal suatu
loop atau proses hitungan tertentu), maka tentunya yang diperhatikan adalah
performance proses itu sendiri bukan alokasi memorinya, karena besar alokasi
memori selalu tetap. Sedangkan untuk sistem operasi berbasis x86 (32 bit),
proses dikerjakan selalu berdasar hitungan 32 bit. Datatype Long membutuhkan
alokasi memori 4 byte (32 bit) jadi proses kerja tidak perlu mengkalkulasi
luas memori, tinggal menuju ke ponter variabel itu, ambil seluruhnya. Jika
pakai datatype Integer (2 byte = 16 bit), maka kerja akan menuju pointer
tersebut, kalkulasi untuk ambil separo blok memori, baru dapat hasilnya.

Kalau dengan komputer jaman sekarang tidak akan terasa bedanya, itu betul.
Tapi tetap saja jumlah proses real yang dikerjakan komputer lebih sedikit
dengan Long dibanding Integer.

Kid.

2010/2/28 zainul ulum <[email protected]>
  
Maturnuwun mas Kid,
Bermanfaat sekali penjelasannya.

Ceritanya begini,

Saya sedang mengolah data hasil ukuran sudut dari alat total station (TS)
yang dinyatakan dalam derajat, menit dan detik. Jika hasil pengukurannya
adalah 204 derajat, 1 menit, 1 detik hasil download dari TS tertulis
204.0101

Jadi kalo data dari TS adalah 204.01, dibaca 204 derajat, 1 menit.

Alasan kenapa saya memakai fungsi yang menghasilkan data type integer adalah
mempertimbangkan bahwa hasil dari fungsi tersebut hanya dari angka 0 sampai
59.

D = Int(DMS)'derajat DMS=Sudut dalam format d.mmss
M = Int((DMS - D) * 100)'menit
s = (DMS * 100 - Int(DMS * 100)) * 100'detik

Dengan rumus di atas sebagian besar mendapatkan hasil yang saya harapkan,
tetapi untuk sudut2 tertentu terjadi kesalahan. Misal untuk sudut 204.1
D=204 tetapi M=0

Kemudian saya ganti INT mejadi FIX, ternyata tetep aja M=0

Sebelum ada jawaban dari mas Kid, karena pusing mikirin INT dan FIX akhirnya
rumus saya rubah menjadi,

s = Format(absDMS, "000.000000")
Der = CInt(Left(s, 3))
Men = CInt(Mid(s, 5, 2))
Det = CDbl(Mid(s, 7, 2)) + CDbl(Right(s, 2) / 100)

Kini, saatnya menerapkan saran dari Mr.Kid

Apakah akibatnya jika semua data type yang semula integer dirubah menjadi
long (integer)?

Karena setahu saya ada hubungannya dengan alokasi memory yang akan dipakai
jika integer adalah 2 byte dengan range -32768 to 32767
Jika long adalah 4 byte dengan range -2147483648 to 2147483647

Mohon maaf kepanjangan ceritanya
_zainul_
________________________________________
From: [email protected] [mailto:[email protected]]
On Behalf Of Mr. Kid
Sent: Sunday, February 28, 2010 5:24 AM
To: [email protected]
Subject: Re: [belajar-excel] kenapa INT((204.01 - 204) * 100) <> 1 ?


  
Hai mas Zainul,

datatype double dan single adalah bilangan approximate dan diproses dengan
algoritma yang berbeda dengan bilangan bulat seperti integer atau long. Jadi
nilai desimal suatu bilangan akan tersusun dalam banyak angka dibelakang
koma yang dibulatkan. Sedangkan fungsi Int() akan membulatkan ke terkecil
terdekat.

Alhasil, semua bilangan approximate (double dan single) akan dibulatkan ke
nilai terkecil terdekat. Sedangkan 1 didefinisikan sebagai nilai approcimate
berupa 0.99sekian

Fungsi konversi datatype berbeda dengan fungsi pembulatan suatu angka
seperti Int()
Int(99.99) = 99
Int(-99.99) = -100
Cint(99.99)=100
Cint(-99.99)=-100

maksud dari syntax mas Zainul adalah memeriksa apakah selisihnya bernilai 1,
maka kerjakanlah keduanya sebagai bilangan bulat, atau jadikanlah hasil
akhir sebagai bilangan bulat 

silakan dicoba, agar punya gambaran yang lebih jelas
clng((204.01-204) * 100)
204.01 * 100 mod 204*100
clng(204.01 * 100) - clng(204 * 100)

Semoga bermanfaat.
Kid.
__________ Information from ESET NOD32 Antivirus, version of virus signature
database 4901 (20100227) __________


The message was checked by ESET NOD32 Antivirus.

http://www.eset.com





Kirim email ke