29.07.2022 08:25    

recep_xyz
Lisp Sonuç Görüntüleme Ayarları Hakkında Bilgi İstiyorum
Örnek Vermek Gerekirse
Command: (setq a (sin 0.2))
0.198669
virgülden sonra 6 hane görülüyor?
command satırında değerin 10 ,12 ,20,... hane gibi olarak ayarlanabilir olmasını görünmesini istiyorum
Bunu sağlayacak bir ayar menü var mıdır ? Ben hassas görülmesini istiyorum.
Command: !a
0.198669 6 hane görünüyor
0.################ 16 hane yapılabilir mi
**değişkende veri mevcut fakat ekran verisi noktadan sonra 6 hane gösteriliyor.
ben bu gösterme olayı ayarını değiştirmek istiyorum.**
metne çevirme fonksiyonunu kullanarak anca görülüyor.
Command: (rtos a 2 8) ondalık 8 hane
"0.19866933"
Command: (rtos a 2 10) ondalık 10 hane
"0.1986693308"
Command: (rtos a 2 20) ondalık 16 hane( max) Tam sayı büyüklüğüne bağlı max. 13 haneye düşebiliyor.
"0.1986693307950612"
Sürekli metin olarak görmek değil command satırın hassasiyet ayarı yok mu? (units işe yaramıyor.)
Yardımını esirgemeyen arkadaşlara şimdiden çek teşekkür ederim.

recep_xyz (13.09.2022 06:37 GMT)

29.07.2022 11:44    

ProhibiT
Merhaba,

Sitemizde yeni olmadığınızı, hatta bazı özel mesajlarımızın da olduğunu hatırlar gibiyim. Bu nedenle, bazı yorum ve uyarılarımı kişisel algılamayıp, sıkça karşılaşılan durumlarla ilgili, yazdıklarınızı örnek alarak genel bir uyarı olarak değerlendireceğinizi umarım.

Her şeyden önce, pek çok yerde yazdığım gibi; Konu Başlıklarınızı ve hatta yazınızın tamamını büyük harflerle yazmayınız. Sanal ortamda büyük harflerle yazmak, "bağırarak konuşmak" anlamına gelir. Bir tek burada değil başka ortamlarda da dikkat etmekte büyük yarar var. Bu anlamda konu başlığınız tarafımdan düzenlenmiş ve düzeltilmiştir.

Sorunuza gelince...
Öncelikle bazı kavramları netleştirmekte fayda var.
https://www.kodlab.com/module/iqitsearch/searchiqit?s=Mehmet+%C5%9Eahin+G%C3%BCvercin kitabımızdan konumuzla ilgili bölümün ekran görüntülerinden inceleyelim.


"Gerçeksayılar, ondalık noktası bulunan sayılardır. Gerçeksayılar Çift Duyarlıklı Kayan Noktalı biçimde (double-precision floating-point format) ve ondalık noktasından sonra 14 anlamlı basamağa kadar saklanırlar. AutoLISP ondalık noktasından sonraki anlamlı basamakların tümünü göstermez. Belli sayıdaki basamaktan sonrasının gösterilmiyor olması, sayının o kısmının göz ardı edilmesi anlamına gelmez. Gerçeksayılar Bilimsel Yazım ile (scientific notation) ifade edilebilirler." Denmiş.

AutoCAD'in sayıları 32 bit, AutoLisp'in 16 bit ile göstermesi (işletim sizteminizin 64 bit olmasından bağımsız olarak) kafa karıştırmasın. Bunlar bu tür verilerin ifade edilmesi ve işlenmesi bakımından gayet yeterlidir. Üstelik AutoLisp ortamında (bazı ilkel dillerde olduğu gibi sizin tanımlamanıza gerek kalmadan) değerler double-Precission (Çift Duyarlıklı) olarak tanımlanırlar.

Aslında problemi çözmek için uğraşırken pek çok şeyi keşfetmişsiniz. Ama komut satırında gösterilmesi için bir kurnazlık var mı? Sorusuna takılmışsınız. Cevap, "Yok!" Bazı uyanıkların aklına LUPREC (Lineer Unit Precission) ve AUPREC (Angular Unit Precission) Sistem Değişkenleri gelmiştir. Bunlar da adlarından anlaşılacağı gibi, Uzunluk Birimi ve Açı değerlerinin ekranda (komut satırında) kaç basamak gösterileceğini belirlerler. Lisp değişkenlerinin değerinin gösterilişini etkilemezler.

Verdiğiniz örneklerden yola çıkarsak, (rtos a 2 8) ile ondalık basamak sayısından sonra 8 basamak elde etmişsiniz. Benzer şekilde (rtos a 2 10) ile 10 basamak yürütmüşsünüz. Ama, (rtos a 2 20) ile elde ettiğiniz ondalık basamak sayısının 20 değil 16 olduğuna dikkat ettiniz mi? Demek ki, (rtos... fonksiyonuyla 16'dan büyük basamak sayısının bir anlamı yok.

16'dan sonraki basamakları görmek için gerçekten ihtiyacınız olduğunu düşünerek bir tavsiyede bulunabilirim. Bunun için de sayısal değeri karakter dizisine (sizin ifadenizle text'e) çevirmek gerek elbette. Örneğin a'nın sayısal değerini 1000 ile çarpın, (rtos a 2 16) ile elde ettiğiniz, 16 ondalık basamaklı sayıyı ifade eden string içinde ondalık noktasını 3 basamak sola kaydırın... böylece sayısal değerinizin ondalık noktasından sonra 19 basamaklı görüntüsünü elde etmiş olursunuz. 20 basamak isterseniz a'yı 10000 ile, 22 basamak isterseniz 1000000 ile çarpmak gerekeceği açıktır.

Sonuç olarak, attığımız taş ürküttüğümüz kuş'a değer mi? Siz karar verin.

Selam ve saygılarımla herkese kolaylıklar dilerim.

29.07.2022 12:08    

recep_xyz
kusura bakmayın benim amacım sadece görünebillik maksadı ile büyük yazmışımdır.
Bu konuda anlatmak istediğim konu kısa lisp komutları ile işlemler yaptırdığım zaman matematik terimin
ondalık kısmını hiç 6 basamaktan ileri göremeyişimdi (tabi bu fonksiyonu bir değişkene atama yapmadığımdan dolayı)
bu verinin command satırında küçük bir hesaplamada dijit ondalık sayıyı en az 12 hane görebilmek isterim bu mümkünmüdür bunu sormak autocad system değişkeni var ise bunu ayarlamak iştedim. Yoksa yapacak birşey yok bu durumda lisp düzenini genel bir duruma getireceğim.(Deformasyon matris çözümleri için hassasiyet gerekli oluyor)

Teşekkürler kafamda bir fikir gelişti. Genel bir lisp yapıp sonuçları text olarak ekrana yerleştirip İşlemler yapacağım başka lisp ile bu text değerlerini ikinci bir lispte kullanmak sabit fonksiyonlarlar olmadığından iki farklı lisp kullanacağım.

Bilgilendirdiğiniz için teşekkürler.

recep_xyz (29.07.2022 12:28 GMT)

29.07.2022 12:58    

Travaci
Kod aralarına neden görmek istediğiniz değerleri yazmıyorsunuz ?

Kod:

(Defun c:xxx (/)
  ..
  ..
  (print (rtos (sin 0.2) 2 16))
  ..
  ..
  (print (rtos (sin 0.1) 2 16))
  ..
  (princ)
)

02.08.2022 06:26    

recep_xyz
Tesekkürler arkadaşlar fonksiyonlar basit değil bayağı karışık ve yoğun birde içinde semt tayini için 6 adet if koşulu kullanılıyor. Birde Rtos kalabalığından kurtulmak istedim. Daha önceki fonk içinde 40 yakın rtos kullanmışım . 15 adet alt fonksiyonla çalışıyor. Argüman değişken isimlendirmek bayağı zorlaştı.
Bu yüzden ikili liste formuda kullandım. (40*40 matris çözümleme denklemleri)
Birde lisp içinde bulunmayan türetilen fonksiyonlar var.
bulunan trigonometrik fonkfiyonlar sin x , cos x , atn x
bulunmayanlara Örnek
(defun c:asin (X) (atan X (sqrt (- 1 (* X X))) ) );end asin (Radyan açı) -1<=X<=+1
(defun c:acos (X) (atan (sqrt (- 1 (* X X))) X ) ;end acos (Radyan açı) -1<=X<=+1
(defun tan (X) ( (/ sin(X) cos(X) ) );end tan
Cotanjant, Secand, Cosecand, Versin, Coversin,
Asec ,Acsc , gibi bunları alt fonksiyonla türetmek gerekli oldu.
Burada çıkan açılar doğru değerinde değil bir de 0 ila Pi/2 aralığında birde semt tayini ile if koşulu ile 0 ila 360 dereceye göre bölgesine göre koşullandırıp denklem matris katsayıları oluşturuyorum.

İşin açıkcası öğrenmeye devam ettikçe işin daha iyisini yapmak ,bu arada detaycı vede takıntılı oluyorsunuz..
bunun sonu yok gibi.....

recep_xyz (02.08.2022 07:21 GMT)

02.08.2022 07:25    

Travaci
Zamanla kodlar yarıya kadar düşücektir :)
Eğer amacınız kontrol ise zaten hiçbirine gerek yok, visual lisp editoründen bütün değerlere değişkenlere bakabilirsiniz.

> 1 <
Copyright © 2004-2022 SQL: 1.08 saniye - Sorgu: 58 - Ortalama: 0.01862 saniye