ceil(), round(), floor() fonksiyonlarının yürütme hızı - sayfa 7

 
Andrey Kisselyov :

örnek olarak alalım:
makinenin bitliğini değiştirseniz bile 64 bite geçtiniz ve makinenin doğruluğu artırılsa bile formülünüz çalışmayı durduracaktır çünkü makinenin doğruluğu hatanızda belirlediğinizden çok daha fazla olacaktır.

Samimi olarak.

PS Formülünüzün belirli sayıda sayı üzerinde başarısız olacağı başka seçenekler de olabilir. Başka bir makineye geçiş veya derleyicide size haber verilmeyen değişiklikler veya bir sayının makinedeki gösterimi değiştiğinde veya derleme yaparken sayının kesirli kısmının azalması nedeniyle sürekli bir hata alıyor. terminalin yeni sürümleri ... ama neyin değişebileceğini asla bilemezsiniz, bence pek iyi değil. bir EĞER yapın veya hatayı tekrar tekrar yazarak daha sonra ne olacağını tahmin edin ...

Bence düşünülecek bir şey var.


Katılmıyorum. Kesinlik arttıkça, ( y=( int )(x+ 0.99999999999999997 ); ) formülü çalışmayı durdurmaz, aynı şekilde çalışır. Daha önce olduğu gibi, hata DBL_EPSILON (geçerli değer: 0.00000000000000022204460492503131) ila 0.0000000000000003 arasındaki sayının kesirli kısmı aralığında meydana gelecektir, DBL_EPSILON sıfıra düşse bile (elbette olamaz), o zaman aralık artacaktır. mevcut DBL_EPSILON'un boyutu, t .e. 2.2204460492503131e-016'ya. Böyle bir dizi hatanın görmezden gelinebileceğine inanıyorum.

Ve genel olarak, terim nedir - "makinenin doğruluğu". Double ve diğer tipler için standartlaştırılmış bir hassasiyet vardır. Mantığınızı görmezden gelin. PS hakkında genellikle sessiz kalın.))) Rahatsız etmekten korkuyorum.

Samimi olarak.

 
Nikolai Semko :

Katılmıyorum. Kesinlik arttıkça, ( y=( int )(x+ 0.99999999999999997 ); ) formülü çalışmayı durdurmaz, aynı şekilde çalışır. Daha önce olduğu gibi, hata DBL_EPSILON (geçerli değer: 0.00000000000000022204460492503131) ila 0.0000000000000003 arasındaki sayının kesirli kısmı aralığında meydana gelecektir, DBL_EPSILON sıfıra düşse bile (ki bu elbette olamaz), ardından aralık mevcut DBL_EPSILON'un boyutu, t .e. 2.2204460492503131e-016'ya. Böyle bir dizi hatanın görmezden gelinebileceğine inanıyorum.

Ve genel olarak, terim nedir - "makinenin doğruluğu". Double ve diğer tipler için standartlaştırılmış bir hassasiyet vardır. Mantığınızı görmezden gelin. PS hakkında genellikle sessiz kalın.))) Rahatsız etmekten korkuyorum.

Samimi olarak.

Piyasadaki fiyatlara göre alırsak, genel olarak doğruluğu 5-6 ondalık basamakta bırakabilirsiniz ve matematikte çalıştığınız ve yeni hızlı hesaplamalarınıza kimin ve ne için ihtiyaç duyulacağı bilinmediği için , kimin ve ne zaman olursa olsun, fonksiyonun hesaplamalarda hata yapacağı bir değeri oraya koyabileceğiniz "aptal davranış ilkesi" ni uygulamalısınız.

"Kredi yok" konusunda, muhakemenizi değerlendirmedim ve haklarınızı küçümsemedim, bu da size dileğimdir. kendine saygı duy, herkes yüzünü pisliğe sokabilir, bir rakibe bunu yapması için bir sebep vermeye değer mi, eylemlerinle kabalık mı? hepimiz bir şeylerde gelişmişizdir, ancak bir şey bizim için ilginç değildir veya bizim için önemli değildir.
çünkü derleyiciden ve derleyiciden sonra koda ne olduğunu hayal ettiğinizden bahsediyoruz. Belki sizin için anlaşılır olacak birkaç cümle söyleyeceğim.

işlemcinin her kayıtta sınırlı sayıda biti olduğundan, içlerinde toplama, çıkarma veya diğer işlemler, bayraklarla çalışmanın bazı incelikleriyle ilişkilidir.
Montajcıda çalışan biri olarak, neyin tehlikede olduğunu anlamalısınız.
öyleyse söyle bana, farklı işlemci modellerinde ADD komutu ne zaman farklı modellerde aynı numarayı kullanarak assembler'da kod yazarsanız taşma olur ve genel olarak herhangi bir register'a sığmayabilir ve öncekinin 8 bitinden başlayarak kesilecektir. 64 bit ve daha fazla nesil mevcut nesil ve bu gelecekte nasıl değişebilir (teknolojinin gelişimi çok kısa, sadece yaklaşık 40 yıl geçti ve zaten ilk tüp işlemciler yerine birçok nükleer işlemciye sahibiz. 80'ler)?

Samimi olarak.
 
Kendiniz için yeni icat ettiğiniz işlevleri, ihtiyaç duyulan yerlerde ve ihtiyaç duyulanlarla ilgili olarak yıllardır kullanıyorum. Bence herhangi bir toplu değiştirme söz konusu olamaz, aksi takdirde zaten yapardım. profil oluşturmayı açmak ve kodunuzda yürütmenin nerede yavaşladığını görmek daha iyidir ve bunlar açıkça matematiksel işlevler değildir. temel olarak bunlar döngüler, çeşitli sorgu türleri vb. matematiksel işlevler en hızlılar arasında ve orada bir şey çıkarmaya çalışmak bence çok makul değil.

Samimi olarak.
 
Nikolai Semko :

Pekala, beyler mükemmel öğrenciler, ikna oldum. Tavan işlevini özellikle sizin için değiştiriyorum:

bu değişken, değişkenden %25-50 daha yavaştır: y=( int )(x+ 0.99999999999999997 ); Ancak diğer yandan, mümkün olduğu kadar doğrudur, negatif sayılar için aynı şekilde çalışır ve aynı zamanda ceil(x) işlevinden yaklaşık 3 kat daha hızlıdır.

Ama ben, sıradan biri ve bir C öğrencisi olarak, dokuzlu seçeneği kullanacağım, çünkü Tüm argümanlarınızın sıkıcı olduğunu düşünüyorum ve benim için, montajcıda uzun süredir programlama yapan ve bu nedenle derlemeden sonra koda ne olduğunu hayal eden bir kişi için, onlarsız yapabileceğiniz kontrolleri koymak aşırıya kaçmaktır.

Kişiliklere geçiş, geleneksel olarak, temel argümanların yokluğu anlamına gelir. Ama yine de bir soru soracağım. Bir milyon turun süresini 8'den 5 veya 2 milisaniyeye düşürmenizi sağlayan şey neydi? Bu tür gecikmelerin bir darboğaz olduğu ortaya çıksa bile, işlemciyi gerçekten ne yükledi? Ben bu tür ihtiyaçları karşılamadım. Belki soyut bir şeydir, akademik ilgi?
 
Vladimir :
Kişiliklere geçiş, geleneksel olarak, temel argümanların yokluğu anlamına gelir.

muhatabı küçük düşürmek amacıyla kültürel davranış eksikliğinin yanı sıra katılıyorum.

Samimi olarak.

 
Andrey Kisselyov :
"geçmemek" konusunda, muhakemenizi değerlendirmedim ve liyakatinizi küçümsemedim, ki bu da size dileğimdir. kendine saygı duy, herkes yüzünü pisliğe sokabilir, bir rakibe bunu yapması için bir sebep vermeye değer mi, eylemlerinle kabalık mı? hepimiz bir şeylerde gelişmişizdir, ancak bir şey bizim için ilginç değildir veya bizim için önemli değildir.
Vladimir :
Kişiliklere geçiş, geleneksel olarak, temel argümanların yokluğu anlamına gelir.
Andrey Kisselev :

muhatabı küçük düşürmek amacıyla kültürel davranış eksikliğinin yanı sıra katılıyorum.

Vay! Elbette, birilerini kırdıysam özür dilerim. Belki de şu sözlerimden rahatsız oldunuz:

Nikolay Semko :

Pekala, beyler mükemmel öğrenciler, ikna oldum. Tavan işlevini sizin için değiştiriyorum:

Ama ben, sıradan biri ve bir C öğrencisi olarak, dokuzlu seçeneği kullanacağım, çünkü Bence tüm argümanlarınız sıkıcı ...

Nikolay Semko :

Ve genel olarak, terim nedir - "makinenin doğruluğu". Double ve diğer tipler için standartlaştırılmış bir hassasiyet vardır. Mantığınızı görmezden gelin. PS hakkında genellikle sessiz kalın.))) Rahatsız etmekten korkuyorum.

Şey, bilirsin... Bence zengin bir hayal gücün var. Her zamanki dostane şakada, "kişiselleşmeyi", "muhatabı küçük düşürme girişimini", "küçümsemeyi" fark ettiniz ...

Yoksa bir şeyi mi kaçırdım da edep sınırlarını aştım?

Üzgünüm Andrey, ama görünüşe göre o notta ne yazdığını anlayacak kadar bilgi ve deneyime sahip değilim:

Andrey Kisselev :
PS Formülünüzün belirli sayıda sayı üzerinde başarısız olacağı başka seçenekler de olabilir. Başka bir makineye geçiş veya derleyicide size haber verilmeyen değişiklikler veya bir sayının makinedeki gösterimi değiştiğinde veya derleme yaparken sayının kesirli kısmının azalması nedeniyle sürekli bir hata alıyor. terminalin yeni sürümleri ... ama neyin değişebileceğini asla bilemezsiniz, bence pek iyi değil. bir EĞER yapın veya hatayı tekrar tekrar yazarak daha sonra ne olacağını tahmin edin ...
Biri bana yazılanların anlamını açıklayabilirse çok minnettar olurum.
Ses tonum için bir kez daha özür dilerim. Meslektaşlar arasında her zaman karşılıklı saygı ve doğru davranıştan yanayım. Beslendi.
 
Vladimir :
Bir milyon turun süresini 8'den 5 veya 2 milisaniyeye düşürmeniz için sizi ne harekete geçirdi? Bu tür gecikmelerin bir darboğaz olduğu ortaya çıksa bile, işlemciyi gerçekten ne yükledi? Ben bu tür ihtiyaçları karşılamadım. Belki soyut bir şeydir, akademik ilgi?
Andrey Kisselev :
profil oluşturmayı açmak ve kodunuzda yürütmenin nerede yavaşladığını görmek daha iyidir ve bunlar açıkça matematiksel işlevler değildir. temel olarak bunlar döngüler, çeşitli sorgu türleri vb. matematiksel işlevler en hızlılar arasında ve orada bir şey çıkarmaya çalışmak bence çok makul değil.
Neden bir şeyin beni yavaşlattığını düşündüğünü bilmiyorum. Aksine, algoritmalarımın en hızlısı olduğunu düşünüyorum. Sadece biraz hızdan bıktım. Elbette, yuvarlama işlevlerinin böyle bir alternatif değişiminin kullanılması çok küçük bir kazanç sağlar, yalnızca yüzdelik bir kesir. Ama bir ipte dünya ile dedikleri gibi. Aynı şey, örneğin uçak ve roket biliminde de olur. Ağırlığı azaltma mücadelesinde, güç pahasına değil, her şeyi, hatta cıvataları değiştirirler. Belki de bu, uçağın bugünlerde mantığa meydan okuyan en güvenli ulaşım şekli olmasının sebeplerinden biridir.
 
Nikolai Semko :

Vay! Elbette, birilerini kırdıysam özür dilerim. Belki de şu sözlerimden rahatsız oldunuz:

Şey, bilirsin... Bence zengin bir hayal gücün var. Her zamanki dostane şakada , "kişiselleşmeyi", "muhatabı küçük düşürme girişimini", "aşağılayıcı" ...

arkadaşlarınıza "şaka" yapmanıza izin verirseniz, arkadaşınız yoktur, çevrenizde bazen güldüğünüz, arkadaşlıklarına ve fikirlerine değer vermediğiniz palyaçolar vardır.

Nikolay Semko :

Yoksa bir şeyi mi kaçırdım da edep sınırlarını aştım?

geçti, ben senin arkadaşın, kardeşin ya da başka bir yakının değildim ve değilim, böylece bana bir tür değerlendirmede bulunabilirsin, TAMAMEN KAMUYA.

Nikolay Semko :
Üzgünüm Andrey, ama görünüşe göre o notta ne yazdığını anlamak için yeterli bilgi ve deneyime sahip değilim: Biri bana yazılanların anlamını açıklarsa çok minnettar olurum.

Mesele şu ki, nedense PS'de yazılanlar sizin için net değil, açık, hızlı formüllerinizi uyguladığınız tekniğin gelecekte nasıl gelişeceğini bilmiyorsunuz, platformun nasıl olacağını bilmiyorsunuz. gelişecek, derleyiciye daha sonra ne ekleneceğini ve sayıların işlemci kayıtları alanında nasıl temsil edileceğini bilmiyorsunuz, bu konuda hiçbir şey bilmiyorsunuz ve onunla her şeyin olacağını savunarak bir sabit tanıtıyorsunuz . açık bir şekilde olumlu karar verdi ve her zaman olması gerektiği gibi, bu, eğer söyleyebilirsem, bir yanılsamadır.

ve eğer forumdaki diğer kişilerin sizin formülünüzü alıp C veya Pascal'da bir yere veya başka bir yere itebileceğini düşünüyorsanız, bu noktaları dikkate almanız gerekir, matematiğin platform veya programlama dili ile sınırı yoktur.

Nikolay Semko :
Ses tonum için bir kez daha özür dilerim. Meslektaşlar arasında her zaman karşılıklı saygı ve doğru davranıştan yanayım. Beslendi.

Özürler kabul edilir. hataları bir daha tekrarlama, yoksa sözlerin boş gevezelik olur.

Samimi olarak.

 
Nikolai Semko :
Neden bir şeyin beni yavaşlattığını düşündüğünü bilmiyorum. Aksine, algoritmalarımın en hızlısı olduğunu düşünüyorum. Sadece biraz hızdan bıktım. Elbette, yuvarlama işlevlerinin böyle bir alternatif değişiminin kullanılması çok küçük bir kazanç sağlar, yalnızca yüzdelik bir kesir. Ama bir ipte dünya ile dedikleri gibi. Aynı şey, örneğin uçak ve roket biliminde de olur. Ağırlığı azaltma mücadelesinde, güç pahasına değil, her şeyi, hatta cıvataları değiştirirler. Belki de bu, uçağın bugünlerde mantığa meydan okuyan en güvenli ulaşım şekli olmasının sebeplerinden biridir.
Ben programlamaya makul bir yaklaşımdan yanayım, burada mantığa aykırı değil, bunu yapmak daha iyidir, ancak herhangi bir "hastalığın" tedavi edilmesi gerekir, çünkü bu sağlıklı bir yaşam tarzından bir sapmadır.

Samimi olarak.
 
Andrey Kisselyov :

arkadaşlarınıza "şaka" yapmanıza izin verirseniz, arkadaşınız yoktur, çevrenizde bazen güldüğünüz, arkadaşlıklarına ve fikirlerine değer vermediğiniz palyaçolar vardır.

Görünüşe göre Nikolai delikler konusunda haklıydı))

Burada şahsen ben hiçbir yerde kişiye geçiş görmedim. Ve gönderilerinizde gerçekten çok fazla mektup var, ancak her şey bir şekilde konu dışı, sadece tartışmak için tartışıyormuşsunuz gibi geliyor.

Neden: